我有以下问题,我有一个名为$ data
的数组在这个数组中我有类似
的东西[6] => Array
(
[code] => 642
[total] => 1708
)
[7] => Array
(
[code] => 642
[total] => 53
)
[8] => Array
(
[code] => 642
[total] => 1421
)
在某些元素中,代码值是相同的,现在我想要做的是将所有元素合并在一起的相同代码值,并将总数加在一起。我尝试在foreach循环中执行此操作,但似乎不起作用。
我这样做
$old_lc = null;
$old_lcv = 0;
$count = 0;
$dd = null;
foreach($data as $d){
if($d['code'] == $old_lc){
$d['total'] = $d['total'] + $old_lcv;
$count--;
$dd[$count]['code'] = $d['code'];
$dd[$count]['total'] = $d['total'];
}else{
$dd[$count]['code'] = $d['code'];
$dd[$count]['total'] = $d['total'];
$count++;
}
$old_lc = $d['code'];
$old_lcv = $d['total'];
}
$data = $dd;
但这似乎不起作用。另外我需要$ data数组来保存密钥,并且应该保持相同的格式
答案 0 :(得分:3)
$result = array();
foreach($ary as $elem) {
$code = $elem['code'];
$total = $elem['total'];
if(!isset($result[$code]))
$result[$code] = 0;
$result[$code] += $total;
}
答案 1 :(得分:2)
此代码将上述数组转换为code =>数组。总
$out = array();
foreach ($data as $k => $v) {
$out[$v['code']] += $v['total'];
}
值得注意的是,在某些设置中,这将生成有关未定义索引的警告。如果这困扰你,你可以使用这个备用版本:
$out = array();
foreach ($data as $k => $v) {
if (array_key_exists($v['code'], $out)) {
$out[$v['code']] += $v['total'];
} else {
$out[$v['code']] = $v['code'];
}
}
如果这就是你想要的东西,它会把它变回原来的东西:
$output = array();
foreach ($out as $code => $total) {
$output[] = array('code' => $code, 'total' => $total);
}
注意: $data
的原始密钥未得到维护,但未说明这是一项要求。如果是,则需要指定如何重建具有相同代码的多个元素。
答案 2 :(得分:0)
[6] => Array ( [code] => 642 [total] => 1708 ) [7] => Array ( [code] => 642 [total] => 53 ) [8] => Array ( [code] => 642 [total] => 1421 )
$data_rec = array(); $data = array(); foreach($data_rec as $key=>$rec) { $data[$key]+= $rec[$key]; } print_r($data);