有很多不错的问答;关于如何获取多维关联数组并在其中求和值的Stackoverflow。不幸的是,我找不到键名没有丢失的数组。
例如:
$arr=array(
array('id'=>'1', 'amount'=>'5'),
array('id'=>'1', 'amount'=>'5'),
array('id'=>'2', 'amount'=>'1'),
array('id'=>'2', 'amount'=>'3')
);
我希望得到的数组看起来像这样:
$result=array(
array('id'=>'1', 'amount'=>'10'),
array('id'=>'2', 'amount'=>'4')
);
不幸的是,我唯一能想到的是:
$result = array();
foreach($arr as $amount){
if(!array_key_exists($amount['id'], $arr))
$result[$amount['id']] =0;
$result[$amount['id']] += $amount['amount'];
}
当echo'd
如下产生时(注意缺少密钥的单词"id"one_answers"amount"):
foreach($result as $id => $amount){
echo $id."==>".$amount."n";
}
1==>10
2==>4
这只是为了表明您已经拥有了最初需要的数据,不过,您接受的答案是更好的处理方法。
你一开始就有以下内容,对吧?
$arr = array(
array('id'=>'1', 'amount'=>'5'),
array('id'=>'1', 'amount'=>'5'),
array('id'=>'2', 'amount'=>'1'),
array('id'=>'2', 'amount'=>'3')
);
输出
Array
(
[0] => Array
(
[id] => 1
[amount] => 5
)
[1] => Array
(
[id] => 1
[amount] => 5
)
[2] => Array
(
[id] => 2
[amount] => 1
)
[3] => Array
(
[id] => 2
[amount] => 3
)
)
然后通过以下算法运行它:
$summedArr = array();
foreach ($arr as $amount) {
$summedArr['amount'][$amount['id']] += $amount['amount'];
$summedArr['id'][$amount['id']] = $amount['id'];
}
现在,忽略由于引用还不存在的索引而产生的Notice
警告,这将输出以下内容:
输出
Array
(
[amount] => Array
(
[1] => 10
[2] => 4
)
[id] => Array
(
[1] => 1
[2] => 2
)
)
你看到钥匙了吗?因为我知道。
现在迭代数组:
foreach ($summedArr as $key => $value) {
echo $k . "==>" . $v . "n";
}
输出
amount==>Array
id==>Array
不过这不是你想要的。您想要:
foreach ($summedArr as $key => $arr) {
foreach ($arr as $v) {
echo $key . "==>" . $v;
}
}
为什么不使用该方法,然后在最后重建所需的数组?
$results = array();
foreach ($arr as $id=>$amount) {
$results[] = array('id' => $id, 'amount' => $amount);
}
这样做的任何其他方式在计算上都会更加昂贵。