PHP 循环出来的数组,我现在想进行合并 并且相加。

$new_arr[]=array("new_id"=> $arr[$key][$keys],"new_value"=>$newvalue);

在foreach内这个是我定义的数组,

我在循环外,
var_dump($new_arr); 后 所出现的结果是,

array(4) {
[0]=> array(2) { ["new_id"]=> string(1) "1" ["new_value"]=> float(0.5) }
[1]=> array(2) { ["new_id"]=> string(1) "2" ["new_value"]=> float(0.5) }
[2]=> array(2) { ["new_id"]=> string(1) "1" ["new_value"]=> int(1) }
[3]=> array(2) { ["new_id"]=> string(1) "1" ["new_value"]=> float(0.5) }
[4]=> array(2) { ["new_id"]=> string(1) "6" ["new_value"]=> float(0.5) }
}
我现在想实现的最终结果是这样的:

array(2) { ["new_id"]=> string(1) "1" ["new_value"]=> int(2) }
array(2) { ["new_id"]=> string(1) "2" ["new_value"]=> float(0.5)}
array(2) { ["new_id"]=> string(1) "6" ["new_value"]=> float(0.5)}
// 解释一下: 就是new_id 这一列 把所有 相同的值 合并到一起, 并且 对应的
new_value 这一列进行相加。

希望大家能帮我解答, 今天晚上我会一直在线等。 很急, 谢谢大家了。

兄弟,不多解释,直接给你贴代码,亲自测试过。

$new = array();
foreach ($arr as $k => $v) {
if (isset($new["{$v['new_id']}"])) {
$new["{$v['new_id']}"] += $v['value'];
} else {
$new["{$v['new_id']}"] = $v['value'];
}
}
$new_arr = array();
$key = 0;
foreach ($new as $k1 => $v1) {
$new_arr[$key]['new_id'] = $k;
$new_arr[$key]['new_value'] = $v1;
$key++;
}

echo '<pre>';
print_r($new_arr);
echo '</pre>';
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-06-16
1楼兄弟怎么不这么写呢?
$new = array();
foreach ($new_arr as $key => $value) {
if(!isset($new[$value['new_id']]['new_id'])) {
$new[$value['new_id']]['new_id'] = $value['new_id'];
$new[$value['new_id']]['new_value'] = $value['new_value'];
}else {
$new[$value['new_id']]['new_value'] += $value['new_value'];
}
}
//var_dump($new);
/*
array(3) { [1]=> array(2) { ["new_id"]=> int(1) ["new_value"]=> float(2) }
[2]=> array(2) { ["new_id"]=> int(2) ["new_value"]=> float(0.5) }
[6]=> array(2) { ["new_id"]=> int(6) ["new_value"]=> float(0.5) }
}
//*/本回答被提问者采纳
第2个回答  2012-06-15
能不能把arr那个数组发过来
相似回答