【发布时间】: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