比较数组数据并获取php

时间:2016-05-23 15:17:48

标签: php arrays comparison array-merge

我有这样的数组。我想删除具有重复ID的元素并获得计数总和

array(3) {
  [0]=>
  array(3) {
    ["Id"]=>
    string(1) "1"
    ["Name"]=>
    string(1) "a"
    ["Count"]=>
    string(1) "2"
  }
  [1]=>
  array(3) {
    ["Id"]=>
    string(1) "2"
    ["Name"]=>
    string(1) "b"
    ["Count"]=>
    string(1) "1"
  }[2]=>
  array(3) {
    ["Id"]=>
    string(1) "1"
    ["Name"]=>
    string(1) "a"
    ["Count"]=>
    string(1) "1"
  }
}

我需要删除具有重复ID的元素并获取计数总和,如下所示

array(2) {
  [0]=>
  array(3) {
    ["Id"]=>
    string(1) "1"
    ["Name"]=>
    string(1) "a"
    ["Count"]=>
    string(1) "3"
  }[1]=>
  array(3) {
    ["Id"]=>
    string(1) "2"
    ["Name"]=>
    string(1) "b"
    ["Count"]=>
    string(1) "1"
  }

}

我经历了很多例子..但找不到答案..

3 个答案:

答案 0 :(得分:1)

不幸的是,没有办法绕过循环。假设Name对于同一个Id是相同的,或者您不关心Name的值:

foreach($array as $value) {
    if(!isset($result[$value['Id']])) {
        $result[$value['Id']] = $value;
    } else {
        $result[$value['Id']]['Count'] += $value['Count'];
    }
}
// re-index if needed
$result = array_values($result);
  • 使用Id作为键
  • 循环数组并构建结果数组
  • 如果密钥Id不存在,请创建
  • 如果确实存在,请将Count添加到当前Count

答案 1 :(得分:0)

只需创建一个新数组,循环当前,创建如果不存在,并将值(总和)插入新数组

你在做什么重复名字?

下面的例子。希望它会有所帮助。

<?php

    $tArr = array(
        array(
            "Id" => "1",
            "Name" => "a",
            "Count" => "2",
        ),
        array(
            "Id" => "2",
            "Name" => "b",
            "Count" => "1",
        ),
        array(
            "Id" => "1",
            "Name" => "a",
            "Count" => "1",
        )
    );

    $rez = array();


    foreach ($tArr as $key => $element) {
        if (empty($rez[$element["Id"]])) {
            $rez[$element["Id"]] = $element;
        } else {
            $rez[$element["Id"]]["Count"] += $element["Count"];
        }
    }

    var_dump($rez);


/** array (size=2)
  1 => 
    array (size=3)
      'Id' => string '1' (length=1)
      'Name' => string 'a' (length=1)
      'Count' => int 3
  2 => 
    array (size=3)
      'Id' => string '2' (length=1)
      'Name' => string 'b' (length=1)
      'Count' => string '1' (length=1)**/

答案 2 :(得分:-1)

试试这个

$result = array_diff_assoc($arr, array_unique($arr));
print_r($result);