我有一个数组如下。
Array (
[A] => Array (
[y] => 2014-11-26
[x] => 1
[zzz] => 2
[ww] => 1 )
[B] => Array (
[y] => 2014-11-27
[zzz] => 2 )
[C] => Array (
[y] => 2014-11-29
[ww] => 2 )
)
子阵列'A'有四个元素,而其他子阵列只有两个元素。我想用数组A的相同元素填充其他子数组,其值为0,以便我得到一个新数组,如下所示。
Array (
[A] => Array (
[y] => 2014-11-26
[x] => 1
[zzz] => 2
[ww] => 1 )
[B] => Array (
[y] => 2014-11-27
[x] => 0
[zzz] => 2
[ww] => 0 )
[C] => Array (
[y] => 2014-11-29
[x] => 0
[zzz] => 0
[ww] => 2 )
)
以下是我的算法。因为我是初级开发人员,所以我正在寻找更好的算法来了解更多信息。
$allArrayKey = array_keys($array);
$mostElement[0] = 0;
foreach($allArrayKey as $value) {
if($mostElement[0] < count($array[$value])) {
$mostElement[0] = count($array[$value]);
}
}
foreach($allArrayKey as $arr) {
if(count($array[$arr]) < $mostElement[0]) {
foreach ($allArrayKey as $xx) {
if(!array_key_exists($xx, $array[$arr])) {
$array[$arr][$xx] = '0';
}
}
}
}
我怎么能用PHP做到这一点?
答案 0 :(得分:1)
创建一个虚拟数组any_key => 0
并将其添加到每个子数组中:
$a = array(
array('x' => 1, 'y' => 2, 'z' => 3, 'w' => 4),
array('x' => 11, 'y' => 22, ),
array('x' => 111, 'y' => 222),
);
$dummy = array_combine(
array_keys($a[0]),
array_fill(0, count($a[0]), 0)
);
foreach($a as &$v)
$v += $dummy;
print_r($a);
如果您的php不支持array_combine
,请使用循环初始化$dummy
:
foreach($a[0] as $k => $_)
$dummy[$k] = 0;
最后,要计算所有子数组中的键的并集而不是使用第一项的键,init $dummy
就像这样:
foreach($a as $v)
foreach($v as $k => $_)
$dummy[$k] = 0;
答案 1 :(得分:0)
所以我说从阵列A获取所有键:
$keys = array_keys($array['A']);
$ keys现在是一个包含所有键的数组。 现在你唯一需要的东西就是循环整个数组,如果它们存在的话就循环遍历键盘。
foreach($array as &$arr){
foreach($keys as $key){
if(!array_key_exists($key, $arr)){
$arr[$key] = 0;
}
}
}