【问题标题】:PHP; Iterate through an assoc. array and add together all valuesPHP;遍历一个关联。数组并将所有值相加
【发布时间】:2012-01-21 07:30:23
【问题描述】:

我有一个数组,我需要“合并”其值,然后将整个事物展平以不具有关联性。我有这个工作,但我希望找到更好的方法。

这实际上是数组:

array (
    [label] => array(
        [0] => array(
            key => val
        )
        [1] => array(
            key => val
        )
    )
    [label2] => array(
        [0] => array(
            key => val
        )
    )

我对此所做的是将 [0] 和 [1] 中的所有值添加到每个 assoc。数组并返回 1 个数组,其中输出类似于:

array (
    [label] => array(
        [0] => array(
            key => SUM(val1+val2)
        )
    )
    [label2] => array(
        [0] => array(
            key => val
        )
    )

我这样做是:

$i = array();

foreach ($array AS $key => $val) {
    $i[$key] = NULL;

    foreach ($val AS $r) foreach ($r AS $k => $v) {
        if (count($array[$key]) > 1) { // Add value.
            $i[$key][$k] += $v; 

        } else { // Leave alone.
            $i[$key][$k] = $v;
        }
    }
}

然后我使用以下方法将其展平成一个大数组:

$array = array();

$r = new RecursiveIteratorIterator(
    new RecursiveArrayIterator($array)
);

foreach ($r as $key => $val) 
    $array[$key] = $val;

return $array

我认为这很丑陋,可以以更有效的方式完成。我就是想不通,SPL 让我很困惑;但我想学习。

有人可以帮忙吗?


我想我明白了:

    $data = array();
    $RII = new RecursiveIteratorIterator(
        new RecursiveArrayIterator($it)
    );

    foreach($RII AS $key => $val) {
        $data[$RII->key()] += $RII->current();
    }

    $this->fullData = $data;

用更少的代码完成了我需要做的一切。这看起来对吗?

【问题讨论】:

    标签: php multidimensional-array iterator


    【解决方案1】:
    $data = array();
    $RII = new RecursiveIteratorIterator(
        new RecursiveArrayIterator($it)
    );
    
    foreach($RII AS $key => $val) {
        $data[$RII->key()] += $RII->current();
    }
    
    $this->fullData = $data;
    

    替换上面的两个函数。它毫无疑问地通过多维数组,并允许我做我需要做的事情。

    【讨论】:

      猜你喜欢
      • 2011-06-20
      • 2016-12-08
      • 2020-10-19
      • 1970-01-01
      • 2012-06-26
      • 2017-03-04
      • 2019-03-01
      • 2017-05-08
      • 2018-04-07
      相关资源
      最近更新 更多