1

我有一个数组如下。

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”有四个元素,而其他子数组只有两个元素。我想用值 0 的数组 A 的相同元素填充其他子数组,以便得到一个新数组,如下所示。

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 中做到这一点?

4

2 回答 2

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;

最后,要计算来自所有子数组的键的联合,而不是使用第一项的键,$dummy像这样初始化:

foreach($a as $v)
    foreach($v as $k => $_)
        $dummy[$k] = 0;
于 2014-11-28T09:49:07.850 回答
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;
        }
    }
}
于 2014-11-28T09:45:05.637 回答