如何从多维数组求和相同的值?

时间:2019-07-15 17:32:38

标签: php

给出如下的多维数组:

Q()

对于 Edilizia Ingegneria ,我如何得到[{"nomeCategoria":"Edilizia","costoCategoria":"350000"}, {"nomeCategoria":"Ingegneria","costoCategoria":"234000"}, {"nomeCategoria":"Ingegneria","costoCategoria":"275000"}, {"nomeCategoria":"Edilizia","costoCategoria":"328000"}]

我不确定如何处理total sum,可能有很多不同的对象,而且我对索引感到困惑,它们始终是一对值。

这就是我的循环方式:

foreach

然后

$costiCategorie[] = array("nomeCategoria"=>$singleCat["nome_categoria"], "costoCategoria"=>$singleCat["costo"]);

4 个答案:

答案 0 :(得分:2)

只需遍历所有类别,然后将类别名称作为键添加到新数组中,然后递增该名称的值即可。

//original array
$costiCategorie = [
    ['nomeCategoria' => 'Edilizia', 'costoCategoria' => 350000],
    ['nomeCategoria' => 'Ingegneria', 'costoCategoria' => 234000],
    ['nomeCategoria' => 'Ingegneria', 'costoCategoria' => 275000],
    ['nomeCategoria' => 'Edilizia', 'costoCategoria' => 328000]
];

//array to hold totals
$totals = array();

//loop through categories
foreach($costiCategorie as $category) {

    $name = $category['nomeCategoria'];
    $cost = $category['costoCategoria'];

    //create `$name` key in `$totals` array if it doesn't already exist
    if(empty($totals[$name])) {
        $totals[$name] = 0;
    }

    //increment total for `$name` in `$totals` array
    $totals[$name] += $cost;

}

print_r($totals);

输出:

Array ( [Edilizia] => 678000 [Ingegneria] => 509000 )

现在,您有了一个数组,其中每个类别名称都作为键,并且每个类别的总费用。

您可以通过执行$totals['Edilizia']来获得任一名称的总数。

答案 1 :(得分:1)

如果我正确理解您的代码,则会错过对正确类别的检查:

<?php 

$array = [
  [
    "nomeCategoria" =>"Edi",
    "costoCategoria" => "350000"
  ],
  [
    "nomeCategoria" =>"Inge",
    "costoCategoria" => "350000"
  ],
  [
    "nomeCategoria" =>"Edi",
    "costoCategoria" => "350000"
  ],
  [
    "nomeCategoria" =>"Inge",
    "costoCategoria" => "350000"
  ]
];

$totalEdi = [];
foreach($array as $item){
  if($item["nomeCategoria"] === "Edi"){
    array_push($totalEdi, $item["costoCategoria"]);
  }
}

echo array_sum($totalEdi);

已更新动态名称:

<?php 

$array = [
  [
    "nomeCategoria" =>"Edi",
    "costoCategoria" => "350000"
  ],
  [
    "nomeCategoria" =>"Inge",
    "costoCategoria" => "350000"
  ],
  [
    "nomeCategoria" =>"Edi",
    "costoCategoria" => "350000"
  ],
  [
    "nomeCategoria" =>"Inge",
    "costoCategoria" => "350000"
  ]
];

$totals = [];

foreach($array as $item){
  if(isset($totals[$item["nomeCategoria"]])){
    $totals[$item["nomeCategoria"]] += $item["costoCategoria"];
  } else {
    $totals[$item["nomeCategoria"]] = $item["costoCategoria"];
  }
}

print_r($totals);

答案 2 :(得分:1)

将值添加到自己的子数组中并分别求和。

$totCostiEdilizia = array();
foreach ($costiCategorie as $singleCostiCategorie) {
    $totCostiEdilizia[$singleCostiCategorie["nomeCategoria"]][] =$singleCostiCategorie["costoCategoria"];
}
var_dump($totCostiEdilizia);
echo "Costi totali Edilizia = " . array_sum($totCostiEdilizia["Edilizia"]) . "\n";

echo "Costi totali Ingegneria = " . array_sum($totCostiEdilizia["Ingegneria"]) . "\n";

https://3v4l.org/gKmNq

答案 3 :(得分:-1)

假设您需要json格式,我将使用这样的代码

<?php

// first i parse the json to array (make sure set true in second parameter which may cause json parsed onto object
$data = json_decode("[{"nomeCategoria":"Edilizia","costoCategoria":"350000"},
{"nomeCategoria":"Ingegneria","costoCategoria":"234000"},
{"nomeCategoria":"Ingegneria","costoCategoria":"275000"},
{"nomeCategoria":"Edilizia","costoCategoria":"328000"}]", true);

// in this case i will try to use tmp variable
$var1 = '';
$var2 = '';

// using for loop to match same value
for ($i;$i < sizeof($data);$i++) {
  if ($data[$i]['nomeCategoria'] == 'Ingegneria') {
    $var1 = $var1 + $data[$i]['costoCategoria'];
  } else {
    $var2 = $var2 + $data[$i]['costoCategoria'];
  }
}