Как объединить два 2D-массива php, когда я хочу добавить некоторые значения? - PullRequest
1 голос
/ 01 декабря 2011

У меня есть два таких php-массива:

Array
(
[0] => Array
    (
        [id] => 712
        [count] => 5
    )

[1] => Array
    (
        [id] => 5510
        [count] => 3
    )
)

Array
(
[0] => Array
    (
        [id] => 856
        [count] => 7
    )

[1] => Array
    (
        [id] => 5510
        [count] => 10
    )
)  

Теперь я хочу сделать результат слияния следующим образом:

Array
(
[0] => Array
    (
        [id] => 712
        [count] => 5
    )

[1] => Array
    (
        [id] => 856
        [count] => 3
    )
[2] => Array
    (
        [id] => 5510
        [count] => 13
    )
)  

Просто добавьте count из тех, у кого естьто же самое id.
И, конечно, реальный массив намного сложнее, чем в примере выше.

Можете ли вы показать мне, как справиться с этим?

1 Ответ

1 голос
/ 01 декабря 2011

Это должно работать для вас

/**
 * merge counts for arrays
 * @param array $arrays,...
 * @return array
 */
function merge_counts(){

    $arrays = func_get_args();

    $ret = array();

    foreach($arrays as $arr){
        foreach($arr as $item){
            if(array_key_exists($k = $item['id'], $ret)){
                $ret[$k]['count'] += $item['count'];
            }
            else {
                $ret[$k] = $item;
            }
        }
    }

    return array_values($ret);   
}

Использование

$result = merge_counts($one, $two);    
print_r($result);

// alternatively...
// $result = merge_counts($one, $two, $three, ...);

выход

Array
(
    [0] => Array
        (
            [id] => 712
            [count] => 5
        )

    [1] => Array
        (
            [id] => 5510
            [count] => 13
        )

    [2] => Array
        (
            [id] => 856
            [count] => 7
        )

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