比较数组数据并在php中获得合并输出

比较数组数据并在php中获得合并输出,php,arrays,comparison,array-merge,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"]=&

我有一个这样的数组。我想删除具有重复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"
  }
}

我列举了许多例子。。但是找不到答案。

试试这个

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

不幸的是,没有办法绕过循环。假设
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

只需创建一个新数组,循环电流,如果不存在则创建,并在新数组中插入值(总和)

你用重复的名字做什么

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

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

你自己试过吗?不起作用。从Php array_unique手册页注意:
注意:array_unique()不适用于多维数组。
,array_diff_assoc也不会有帮助,而且您没有做问题的计数部分。与@Abracadver的回答非常类似。它们能结合起来吗?