PHP数组处理,二维数组,去重以及值相加。想了半天没有想到,求帮助?

<?php
$array = Array
(

[0] => Array
    (
        [source_browser] => 1
        [num] => 1
    )

[1] => Array
    (
        [source_browser] => 2
        [num] => 2
    )

[2] => Array
    (
        [source_browser] => 3
        [num] => 3
    )

[3] => Array
    (
        [source_browser] => 2
        [num] => 4
    )

[4] => Array
    (
        [source_browser] => 4
        [num] => 5
    )

[5] => Array
    (
        [source_browser] => 1
        [num] => 6
    )

);
怎么把数组处理为:Array
(

[0] => Array
    (
        [source_browser] => 1
        [num] => 7
    )

[1] => Array
    (
        [source_browser] => 2
        [num] => 6
    )

[2] => Array
    (
        [source_browser] => 3
        [num] => 3
    )

[3] => Array
    (
        [source_browser] => 4
        [num] => 5
    )

)
也就是当source_browser的值相等的时候,把他们的num值相加然后,相等的只保留一个键值对source_browser num为相加后的
?>

阅读 3k
2 个回答
<?php

    $array = [
        ['source_browser' => 1, 'num' => 1],
        ['source_browser' => 3, 'num' => 3],
        ['source_browser' => 2, 'num' => 3],
        ['source_browser' => 2, 'num' => 3],
        ['source_browser' => 1, 'num' => 3]
    ];
    
    $tmp = [];

    foreach ($array as $v)
    {
        $index = $v['source_browser'] - 1;

        // init 
        if (!isset($tmp[$index]))
        {
            $tmp[$index]['num'] = 0;
            $tmp[$index]['source_browser'] = $v['source_browser'];
        }
        
        $tmp[$index]['num'] += $v['num'];
    }

    var_dump($tmp);

---------- Debug PHP ----------

array(3) {
  [0]=>
  array(2) {
    ["num"]=>
    int(4)
    ["source_browser"]=>
    int(1)
  }
  [2]=>
  array(2) {
    ["num"]=>
    int(3)
    ["source_browser"]=>
    int(3)
  }
  [1]=>
  array(2) {
    ["num"]=>
    int(6)
    ["source_browser"]=>
    int(2)
  }
}

输出完成 (耗时 0 秒) - 正常终止

排序有点问题,如果你想按你的那样排序,自己写一个循环也是很简单的。我就不多写了。

` $array = [

        ['source_browser' => 1, 'num' => 1],
        ['source_browser' => 3, 'num' => 3],
        ['source_browser' => 2, 'num' => 3],
        ['source_browser' => 2, 'num' => 3],
        ['source_browser' => 1, 'num' => 3]
    ];

    $tmp = [];
        
    foreach ($array as $key => $value){
        if(!isset($tmp[$value['source_browser']])){
            $tmp[$value['source_browser']] = $value;

        }else{
            $tmp[$value['source_browser']]['num'] += $value['num'];

        }

    }
    
    $tmp = array_values($tmp);
    echo '<pre>';
    var_dump($tmp);
    die();`
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题