【发布时间】:2016-06-01 19:20:44
【问题描述】:
我从一些网站收到不同的 json 对象。 这些对象通常看起来不一样。
如何在 json 对象的每个位置添加缺失的键?
这里有一个例子来表示给定的对象
$data = new stdClass();
$data->a1 = ["name"=>"John","age"=>"27","phone"=>"5566634"];
$data->a2 = ["name"=>"Mark","age"=>"38","gender"=>"Male"];
这就是期望的输出:
$data->a1 = ["name"=>"John","age"=>"27","phone"=>"5566634", "gender"=>"unknown"];
$data->a2 = ["name"=>"Mark","age"=>"38","phone"=>"unknown", "gender"=>"Male"];
我只想在每个数组上都有相同的键
我尝试的是遍历所有对象并将所有现有键保存在$arraykeys 上。然后再次foreach所有对象检查当前是否
密钥在创建的$arraykeys 内,但是对于大型 json 对象来说这真的很慢。
到目前为止,我为获得所有密钥所做的尝试:
$arraykeys = [];
foreach ( $data as $item ) {
foreach ( $item as $key => $value ) {
if (! array_key_exists($key, $arraykeys)){
$arraykeys[$key] = null;
}
}
}
但不知道如何完成具有所有键的数组。我该如何解决这个问题?
注意:对象可能有n 位置和更多键。这只是一个例子。理想情况下,每个数组上的键顺序相同。
【问题讨论】:
-
“arraykeys”是否被称为预定义列表?
-
不,这只是一个例子,但还有更多的键,如电子邮件、地址等。将来可能还会更多。这就是为什么我需要得到所有的钥匙......
-
@KrBm eval.in/581163 您可以使用您的解决方案来构建密钥数组。它有效
-
@KrBm 或者如果您使用 'unknown` 初始化数组键,则稍微简化第二个循环 - eval.in/581178