PHP;Итерация через ассоциированную.массив и сложить все значения - PullRequest
0 голосов
/ 21 января 2012

У меня есть массив, для которого мне нужно «объединить» значения, а затем сгладить все это, чтобы не быть ассоциативным.У меня это работает, но я надеялся найти лучший способ.

Вот, по сути, массив:

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;

Сделал все, что мне нужно, в меньшем количестве кода.Это выглядит правильно?

1 Ответ

0 голосов
/ 21 января 2012
$data = array();
$RII = new RecursiveIteratorIterator(
    new RecursiveArrayIterator($it)
);

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

$this->fullData = $data;

Заменяет обе функции выше. Он проходит через многомерный массив без вопросов и позволяет мне делать то, что мне нужно было сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...