我有一个多维动态数组,所以它看起来像:
$array = array(
'name1' => [],
'name2' => array('x1' => 25, 'a2' => 10, 'y3' => 8),
'name3' => array('x3' => 5, 'y3' => 6)
);
我需要的是:
$array = array(
'name1' => array('x1' => 0, 'a2' => 0, 'y3' => 0, 'x3' => 0),
'name2' => array('x1' => 25, 'a2' => 10, 'y3' => 8, 'x3' => 0),
'name3' => array('x1' => 0, 'a2' => 0, 'y3' => 6, 'x3' => 5)
);
最大的问题是这个阵列是动态的,我该怎么做?
答案 0 :(得分:2)
您可以使用array_merge
,call_user_func_array
,array_keys
和array_fill_keys
来获取所有密钥。
使用map
循环播放数组并填充缺少的键
$array = array(
'name1' => [],
'name2' => array('x1' => 25, 'a2' => 10, 'y3' => 8),
'name3' => array('x3' => 5, 'y3' => 6)
);
//Get all keys and assign 0 as default
$keys = array_fill_keys(array_keys( call_user_func_array('array_merge', $array) ), 0);
//Map the array and check
$results = array_map(function($v) use($keys) {
$arr = array();
foreach( $keys as $key => $val ) {
$arr[$key] = isset( $v[$key] ) ? $v[$key] : 0;
}
return $arr;
}, $array);
echo "<pre>";
print_r( $results );
echo "</pre>";
这将导致:
Array
(
[name1] => Array
(
[x1] => 0
[a2] => 0
[y3] => 0
[x3] => 0
)
[name2] => Array
(
[x1] => 25
[a2] => 10
[y3] => 8
[x3] => 0
)
[name3] => Array
(
[x1] => 0
[a2] => 0
[y3] => 6
[x3] => 5
)
)
答案 1 :(得分:0)
这是我的答案,但我认为有更好的方法可以做到这一点:
<?php
$array = array(
'name1' => [],
'name2' => array('x1' => 25, 'a2' => 10, 'y3' => 8),
'name3' => array('x3' => 5, 'y3' => 6)
);
$keys=['x1','a2','y3','x3'];
$l=sizeof($array);
for($i=1;$i<=$l;$i++){
if($i!=$l){
foreach($keys as $k){
if(!isset($array["name$i"][$k])) $array["name$i"][$k]=0;
}
}
else{
foreach($keys as $k) if(!isset($array["name$i"][$k])) $array["name$i"][$k]=0;
}
}
echo "<h2><pre>";
print_r($array);
?>
Array
(
[name1] => Array
(
[x1] => 0
[a2] => 0
[y3] => 0
[x3] => 0
)
[name2] => Array
(
[x1] => 25
[a2] => 10
[y3] => 8
[x3] => 0
)
[name3] => Array
(
[x3] => 5
[y3] => 6
[x1] => 0
[a2] => 0
)
)