我需要对数组中元素1中的值求和,其中元素0中的值是重复的。
这里是我的数组的一小部分
Array
(
[0] => 3
[1] => 1
)
Array
(
[0] => 3
[1] => 2
)
Array
(
[0] => 3
[1] => 128
)
Array
(
[0] => 39
[1] => 4
)
我期望看到的结果是
Array
(
[0] => 3
[1] => 131
)
Array
(
[0] => 39
[1] => 4
)
我仍然是PHP的新手,所以非常感谢您的帮助。
发布于 2018-06-01 00:26:14
您可以组合使用array_intersect、array_column和array_sum来仅迭代两次。(每个唯一的第0列值一个)。
$col0 = array_column($arr, 0);
$col1 = array_column($arr, 1);
Foreach(array_unique($col0) as $val){
$res[] = [$val, array_sum(array_intersect_key($col1, array_intersect($col0,[$val])))];
}
Var_dump($res);
发布于 2018-06-01 00:26:58
我这样做的方法是确保所有的副本都放在同一个数组中。
// Your data
$sample = [[3, 1],[3, 2],[3, 128],[39, 4]];
foreach($sample as $array){
$tmp[$array[0]][] = $array[1];
}
# Output: {"3":[1,2,128],"39":[4]}
现在对数组求和,并将其放回原来的结构。
foreach($tmp as $k => $v){
$new[] = [$k, array_sum($v)];
}
# Output: [[3,131],[39,4]]
但是有很多路通向罗马。
发布于 2018-05-31 23:37:51
试试这段代码。这可能会对你有帮助。
$array = array(["0" => 3, "1" => 1] , ["0" => 3, "1" => 2], ["0" => 3, "1" => 128], ["0" => 39, "1" => 4]);
$finalArray = [];
foreach($array as $a) {
$finalArray[$a[0]][0] = $a[0];
$finalArray[$a[0]][1] = !isset($finalArray[$a[0]][1]) ? $a[1] : $finalArray[$a[0]][1] + $a[1];
}
echo '<pre>';
print_r($finalArray);
exit;
https://stackoverflow.com/questions/50627884
复制相似问题