像多维数组php

时间:2018-05-31 15:29:24

标签: php

我需要对数组的元素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的新手,所以非常感谢任何帮助。

6 个答案:

答案 0 :(得分:1)

您可以使用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);

https://3v4l.org/gKb5b

答案 1 :(得分:1)

我完成它的方式是确保所有重复项放在同一个数组中。

// 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]]

但很多道路通往罗马。

答案 2 :(得分:0)

试试这段代码。它可能对你有帮助。

$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;

答案 3 :(得分:0)

你可以这样做。我已分成两个foreach。希望它有所帮助。

    <?php

   $a = [[3,1],[3,2],[3,128],[39,4]];

   $result=[];
   $temp = [];

   foreach($a as $line) {
     $temp[$line[0]] += $line[1];
   }

   foreach($temp as $k => $value) {
      $result[]=[$k ,$value];
   }

答案 4 :(得分:0)

$arr = [ [ 3, 1],[  3, 2 ],[  3, 128], [ 39, 4]];
$sum = [];
foreach($arr as $value) {
   $sum[$value[0]][] = $value[1];
}
foreach($sum as $key=>$value ) {
  $result[] = [ $key, array_sum($value)];
}

输出:

Array
(
    [0] => Array
        (
            [0] => 3
            [1] => 131
        )

    [1] => Array
        (
            [0] => 39
            [1] => 4
        )
)

答案 5 :(得分:0)

$data =
[
    [3,1],
    [3,2],
    [3,128],
    [39,4]
];

foreach($data as $item)
    $sums[$item[0]] = ($sums[$item[0]] ?? 0) + $item[1];

$result = array_map(null, array_keys($sums), $sums);
var_export($result);

输出:

array (
  0 => 
  array (
    0 => 3,
    1 => 131,
  ),
  1 => 
  array (
    0 => 39,
    1 => 4,
  ),
)