这感觉像是重复的,但我已经遇到了很多类似的问题,并且不能完全使解决方案适合我的问题。
我有以下数组,我想按“SECTOR”分组,然后对“MCAP”键求和。
[
["TICKER" => "ABC", "SECTOR" => 30, "MCAP" => 1000],
["TICKER" => "XYZ", "SECTOR" => 30, "MCAP" => 500],
["TICKER" => "ASD", "SECTOR" => 25, "MCAP" => 750]
]
我需要实现的是:
[
30 => ['MCAP' => 1500],
25 => ['MCAP' => 750],
]
我尝试过使用 foreach 循环,最好的方法是将所有 MCAP 值相加。我无法理解它,非常感谢您在挑战中提供帮助。
编辑:这是我尝试过的:
$sector = array();
foreach ($stocks as $row) {
$sum += $row['MCAP'];
$sector[$row['SECTOR']]['MCAP'] = $sum;
}
但结果是这样的:
[
30 => ['MCAP' => 1500],
25 => ['MCAP' => 2250]
]
尝试使用扇区值进行求和,如下所示:
$res = array();
foreach($data as $key=> $value){
$res[$value['SECTOR']] += $value['MCAP'];
}
var_dump($res);
输出:
Warning: Undefined array key 30
Warning: Undefined array key 25
array(2) {
[30]=>
int(1500)
[25]=>
int(750)
}
循环遍历数组,并检查结果数组中是否存在当前的
SECTOR
键。如果不是,则将其定义为零。然后将 MCAP
的当前值添加到结果数组中。
$result = array();
foreach ($array as $key=> $value) {
if (!isset($result[$value['SECTOR']]))
$result[$value['SECTOR']]['MCAP'] = 0;
$result[$value['SECTOR']]['MCAP'] += $value['MCAP'];
}
print_r($result);
您需要创建另一个空数组来保存
sum
。循环时,您可以创建每个 section
并对 mcap
的值求和:
$arraySum = array();
foreach($array as $key => $value) {
if (!isset($arraySum[$value['SECTOR']]))
$arraySum[$value['SECTOR']] = $value['MCAP'];
else
$arraySum[$value['SECTOR']] += $value['MCAP'];
}
print_r($arraySum);