【问题标题】:PHP Complete sub array with the same number of elementsPHP完整的子数组具有相同数量的元素
【发布时间】:2015-01-26 22:35:33
【问题描述】:

我有一个数组如下。

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

【问题讨论】:

  • 从数组A中获取所有key,遍历主数组,检查所有key是否存在,如果不存在则添加
  • Google 的习惯是,阅读文档,尝试一下,当您的代码不起作用时,将其发布在这里并寻求帮助。不要问“请为我编码”
  • @Mawg:我可以用一个草率的算法来解决它,因为我是一名初级开发人员。我问这个问题是为了寻找更好的算法来获得更好的知识。

标签: php arrays sub-array


【解决方案1】:

创建一个虚拟数组any_key =&gt; 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;

【讨论】:

  • $v += $dummy;array_merge($v,$dummy)一样吗?
  • @UnskilledFreak: 有点像array_merge($dummy, $v)
【解决方案2】:

正如我所说,从数组 A 中获取所有键:

$keys = array_keys($array['A']);

$keys 现在是一个包含所有键的数组。 现在您唯一需要做的就是遍历整个数组并遍历键以检查它们是否存在..

foreach($array as &$arr){
    foreach($keys as $key){
        if(!array_key_exists($key, $arr)){
            $arr[$key] = 0;
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    • 2018-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多