PHP完成子数组,具有相同数量的元素

时间:2014-11-28 09:40:25

标签: php arrays sub-array

我有一个数组如下。

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

2 个答案:

答案 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;
        }
    }
}