简体   繁体   English

如何在PHP中合并数组

[英]How to merge array in PHP

I want to merge same array id into 1 array and and sum pageview using PHP. 我想将相同的数组ID合并为1个数组,并使用PHP对综合浏览量进行汇总。 Please Help me. 请帮我。

Code

Array
(
    [0] => Array
        (
            [id] => 17088
            [PageView] => 5575
        )
    [1] => Array
        (
            [id] => 17088
            [PageView] => 4338
        )
    [2] => Array
        (
            [id] => 1121
            [PageView] => 3922
        )
    [3] => Array
        (
            [id] => 11397
            [PageView] => 2625
        )
    [4] => Array
        (
            [id] => 9638
            [PageView] => 2541
        )
    [5] => Array
        (
            [id] => 11397
            [PageView] => 2377
        )
    [6] => Array
        (
            [id] => 1121
            [PageView] => 10
        )
)

Result: 结果:

Array
(
    [0] => Array
        (
            [id] => 17088
            [PageView] => 9913
        )
    [1] => Array
        (
            [id] => 1121
            [PageView] => 3932
        )
    [2] => Array
        (
            [id] => 11397
            [PageView] => 5002
        )
    [3] => Array
        (
            [id] => 9638
            [PageView] => 2541
        )
)

Thank you 谢谢

It's very simple : 这很简单:

error_reporting(E_ALL ^ E_NOTICE);

foreach ($array as $row)
  $grouped[$row['id']] += $row['PageView'];

print_r($grouped);

You can use below logic, 您可以使用以下逻辑,

$test = [1=> ['id'=>10, 'sum'=>10],['id'=>12, 'sum'=>10],['id'=>10, 'sum'=>10]];

    merge($test);
function merge($array) 
{
    $tempArray = array();
    foreach($array as $key=>$value) {
        if(array_key_exists($value['id'],$tempArray)) {
           $tempArray[$value['id']]['sum'] = $tempArray[$value['id']]['sum'] +  $value['sum'];
        } else {
            $tempArray[$value['id']] = $value;
        }
    }
    print "<pre>"; print_r($tempArray); exit;
}

Just loop the array and sum if the key already exist. 只需循环数组并求和(如果键已经存在)。
I make an associative array on the id which makes it easy to sum in the loop. 我在id上创建了一个关联数组,可以很容易地在循环中求和。
If you want an indexed array you can use array_values after the loop. 如果需要索引数组,则可以在循环后使用array_values。

foreach($arr as $sub){
    if(isset($new[$sub['id']])){
        $new[$sub['id']]['PageView'] = $new[$sub['id']]['PageView'] + $sub['PageView'];
    }else{
        $new[$sub['id']] = $sub;
    }

}
var_dump($new);

Output: 输出:

array(4) {
  [17088]=>
  array(2) {
    ["id"]=>
    string(5) "17088"
    ["PageView"]=>
    int(9913)
  }
  [1121]=>
  array(2) {
    ["id"]=>
    string(4) "1121"
    ["PageView"]=>
    int(3932)
  }
  [11397]=>
  array(2) {
    ["id"]=>
    string(5) "11397"
    ["PageView"]=>
    int(5002)
  }
  [9638]=>
  array(2) {
    ["id"]=>
    string(4) "9638"
    ["PageView"]=>
    string(4) "2541"
  }
}

https://3v4l.org/W3Afa https://3v4l.org/W3Afa

Try This code- 试试这个代码-

This is your array - 这是你的数组-

$a = array(0=>array('id' => 17088,'PageView' => 5575),1=>array('id' => 17088,'PageView' => 4338),2=>array('id' => 1121,'PageView' => 3922),3=>array('id' => 11397,'PageView' => 2625),4=>array('id' => 9638,'PageView' => 2541),5=>array('id' => 11397,'PageView' => 2377),6=>array('id' => 1121,'PageView' => 10));

    $b=array();

    foreach ($a as $key => $value) {
        if(isset($b[$value['id']]) && count($b[$value['id']])){
            $b[$value['id']]['PageView']=$b[$value['id']]['PageView']+$value['PageView'];
        }else{
            $b[$value['id']]['id']=$value['id'];
            $b[$value['id']]['PageView']=$value['PageView'];
        }
    }

    print_r($b);

Output - 输出-

Array
(
    [17088] => Array
        (
            [id] => 17088
            [PageView] => 9913
        )

    [1121] => Array
        (
            [id] => 1121
            [PageView] => 3932
        )

    [11397] => Array
        (
            [id] => 11397
            [PageView] => 5002
        )

    [9638] => Array
        (
            [id] => 9638
            [PageView] => 2541
        )

)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM