【问题标题】:How to merge two 2D php arrays while I want to add up some values?当我想添加一些值时如何合并两个 2D php 数组?
【发布时间】:2012-01-10 08:04:34
【问题描述】:

我有两个这样的 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
    )
)  

只需将具有相同id 的那些count 相加即可。
当然,真正的数组比上面的例子要复杂得多。

你能告诉我解决这个问题的方法吗?

【问题讨论】:

  • 如果它只有这样的两列,我会将其转换为 key=>value 数组并对其进行迭代

标签: php arrays cakephp multidimensional-array merge


【解决方案1】:

这应该适合你

/**
 * 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
        )

)

【讨论】:

  • 谢谢!这就是我想要的答案!
猜你喜欢
  • 1970-01-01
  • 2022-11-17
  • 2018-08-22
  • 2018-11-27
  • 2017-02-07
  • 1970-01-01
  • 2016-05-31
  • 2017-03-03
  • 1970-01-01
相关资源
最近更新 更多