У меня есть массив, для которого мне нужно «объединить» значения, а затем сгладить все это, чтобы не быть ассоциативным.У меня это работает, но я надеялся найти лучший способ.
Вот, по сути, массив:
array (
[label] => array(
[0] => array(
key => val
)
[1] => array(
key => val
)
)
[label2] => array(
[0] => array(
key => val
)
)
Что я делаю с этим, чтобы добавить все значения из [0] и [1] на ассоциированную.массив и возвращают 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;
Сделал все, что мне нужно, в меньшем количестве кода.Это выглядит правильно?