问个PHP数组合并的问题~请高手指点

问个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));