给出如下的多维数组:
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"]);
答案 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";
答案 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'];
}
}