问题描述
- 问个PHP数组合并的问题~请高手指点
-
$arr1=array( "0"=>array( 'id' => '2', 'b' => 0, 'num' => 4 ), "1"=>array( 'id' => '1', 'b' => 0, 'num' => 4 ) ); $arr2=array( "1"=>array( 'id' => '3', 'b' => 0, 'num' => 4 ), "2"=>array( 'id' => '2', 'b' => 0, 'num' => 4 ) );
想要合并这个两个数组,判断条件,id,b两个元素都相同的情况的NUM值相加。新数组键值重新排列0 1 2 3
求高手指点。谢谢。
解决方案
<?php
$arr1=array(
"0"=>array(
'id' => '2',
'b' => 0,
'num' => 4
),
"1"=>array(
'id' => '1',
'b' => 0,
'num' => 4
)
);
$arr2=array(
"1"=>array(
'id' => '3',
'b' => 0,
'num' => 4
),
"2"=>array(
'id' => '2',
'b' => 0,
'num' => 4
)
);
$arr3 = array_merge($arr1, $arr2);
function arr_combine($array){//按照id值进行冒泡排序
$length = count($array);
for($i = 0; $i < $length; $i++) {
for($j = $i+1; $j < $length; $j++){
if ($array[$i]['id'] > $array[$j]['id'] ) {
$tmp = $array[$i];
$array[$i] = $array[$j];
$array[$j] = $tmp;
}else if($array[$i]['id'] == $array[$j]['id'] && $array[$i]['b'] == $array[$j]['b']){//按照id,b值是否相同,进行合并
$array[$i]['num'] = $array[$i]['num']+$array[$j]['num'];
$array[$j]['num'] = 0;//此处将合并过的数组的num设置为0
}
}
}
//对结果数组进行处理,如果num为0,则剔除
foreach( $array as $key => $value ) {
if($value['num'] == 0) unset($array[$key]);
}
return $array;
}
var_dump(arr_combine($arr3));
解决方案二:
虽然有点繁琐,但还是解决了问题,另外一种写法
foreach($arr1 as $v) $res["$v[id]_$v[b]"] = $v;
foreach($arr2 as $v)
if(isset($res["$v[id]_$v[b]"])) $res["$v[id]_$v[b]"]['num'] += $v['num'];
else $res["$v[id]_$v[b]"] = $v;
print_r(array_values($res));