Php 使用不同的键完成数组
我从一些网站收到不同的json对象。 这些对象通常看起来不一样 如何在json对象的每个位置添加缺少的键 这里有一个示例来表示给定的对象Php 使用不同的键完成数组,php,arrays,Php,Arrays,我从一些网站收到不同的json对象。 这些对象通常看起来不一样 如何在json对象的每个位置添加缺少的键 这里有一个示例来表示给定的对象 $data = new stdClass(); $data->a1 = ["name"=>"John","age"=>"27","phone"=>"5566634"]; $data->a2 = ["name"=>"Mark","age"=>"38","gender"=>"Male"]; 这就是期望的输出: $d
$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"];
我只想在每个数组上都有相同的键
我尝试的是foreach所有对象并保存$arraykeys
上的所有现有键。然后再次foreach所有对象,检查当前
键位于创建的$arraykeys
中,但对于大型json对象来说,这非常缓慢
到目前为止,我一直试图得到所有的钥匙:
$arraykeys = [];
foreach ( $data as $item ) {
foreach ( $item as $key => $value ) {
if (! array_key_exists($key, $arraykeys)){
$arraykeys[$key] = null;
}
}
}
但不知道如何完成拥有所有密钥的数组。我怎样才能解决这个问题
注意:对象可能具有
n
位置和更多关键点。这只是一个例子。理想情况下,每个数组上的键顺序相同。如果要对多个字段执行此操作,可以执行以下操作:
<?php
$defaultArray = [
'name' => 'unknown',
'age' => 'unknown',
'gender' => 'unknown',
'phone' => 'unknown',
];
foreach ( $data as $item ) {
$item = array_merge($defaultArray, $item);
}
如果要对多个字段执行此操作,可以执行以下操作:
<?php
$defaultArray = [
'name' => 'unknown',
'age' => 'unknown',
'gender' => 'unknown',
'phone' => 'unknown',
];
foreach ( $data as $item ) {
$item = array_merge($defaultArray, $item);
}
使用调用用户函数数组
,数组替换递归
,数组键
,数组填充键
和数组合并
函数的扩展解决方案:
$data = new stdClass();
$data->a1 = ["name"=>"John","age"=>"27","phone"=>"5566634"];
$data->a2 = ["name"=>"Mark","age"=>"38","gender"=>"Male"];
$data->a3 = ["name"=>"Mark","age"=>"38","gender"=>"Male", "email"=>"myemail@gmail.com", "address"=>"Jack London st. 102"];
$data->a4 = ["name"=>"John","age"=>"30","gender"=>"Male"];
// getting the array containing all possible keys
$keys = call_user_func_array('array_replace_recursive', (array) $data);
// filling predefined list of keys with "unknown" value
$keys = array_fill_keys(array_keys($keys), "unknown");
foreach ($data as &$prop) {
$prop = array_merge($keys, $prop);
}
print_r($data);
输出:
stdClass Object
(
[a1] => Array
(
[name] => John
[age] => 27
[phone] => 5566634
[gender] => unknown
[email] => unknown
[address] => unknown
)
[a2] => Array
(
[name] => Mark
[age] => 38
[phone] => unknown
[gender] => Male
[email] => unknown
[address] => unknown
)
[a3] => Array
(
[name] => Mark
[age] => 38
[phone] => unknown
[gender] => Male
[email] => myemail@gmail.com
[address] => Jack London st. 102
)
[a4] => Array
(
[name] => John
[age] => 30
[phone] => unknown
[gender] => Male
[email] => unknown
[address] => unknown
)
)
使用调用用户函数数组
,数组替换递归
,数组键
,数组填充键
和数组合并
功能的扩展解决方案:
$data = new stdClass();
$data->a1 = ["name"=>"John","age"=>"27","phone"=>"5566634"];
$data->a2 = ["name"=>"Mark","age"=>"38","gender"=>"Male"];
$data->a3 = ["name"=>"Mark","age"=>"38","gender"=>"Male", "email"=>"myemail@gmail.com", "address"=>"Jack London st. 102"];
$data->a4 = ["name"=>"John","age"=>"30","gender"=>"Male"];
// getting the array containing all possible keys
$keys = call_user_func_array('array_replace_recursive', (array) $data);
// filling predefined list of keys with "unknown" value
$keys = array_fill_keys(array_keys($keys), "unknown");
foreach ($data as &$prop) {
$prop = array_merge($keys, $prop);
}
print_r($data);
输出:
stdClass Object
(
[a1] => Array
(
[name] => John
[age] => 27
[phone] => 5566634
[gender] => unknown
[email] => unknown
[address] => unknown
)
[a2] => Array
(
[name] => Mark
[age] => 38
[phone] => unknown
[gender] => Male
[email] => unknown
[address] => unknown
)
[a3] => Array
(
[name] => Mark
[age] => 38
[phone] => unknown
[gender] => Male
[email] => myemail@gmail.com
[address] => Jack London st. 102
)
[a4] => Array
(
[name] => John
[age] => 30
[phone] => unknown
[gender] => Male
[email] => unknown
[address] => unknown
)
)
“arraykeys”是一个预定义的列表吗?不,这只是一个示例,但还有更多的键,如电子邮件、地址等。将来可能还会更多。这就是为什么我需要获取所有密钥…@KrBm您可以使用您的解决方案来构建密钥阵列。信息技术works@KrBm或者,如果您使用“未知”初始化arraykeys,则可以稍微简化第二个循环——“arraykeys”是否被称为预定义列表?不,这只是一个示例,但还有更多的键,如电子邮件、地址等。将来可能还会更多。这就是为什么我需要获取所有密钥…@KrBm您可以使用您的解决方案来构建密钥阵列。信息技术works@KrBm或者,如果使用“未知”初始化arraykeys,则稍微简化第二个循环-看起来手机
就在第一个数组上,我如何修复此问题?@KrBm抱歉,请稍候。将会有一个更新,例如手机
就在第一个阵列上,我如何修复它?@KrBm抱歉,请稍等。将会有一个更新