比较数组数据并在php中获得合并输出
我有一个这样的数组。我想删除具有重复id的元素并获得计数的总和比较数组数据并在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"]=&
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的回答非常类似。它们能结合起来吗?