兩個二維數組合並


$arr1=array(
'0' => array ( 'userId' => 1,'date' => '2011-4-11', 'num' => '9' ),   
'1' => array ( 'userId' => 2,'date' => '2011-4-12', 'num' => '3' ),   
'2' => array ( 'userId' => 6,'date' => '2011-4-13', 'num' => '4'),   
'3' => array ( 'userId' => 3,'date' => '2011-4-13', 'num' => '5'),   
'4' => array ( 'userId' => 1,'date' => '2011-4-12', 'num' => '7'),   
);
$arr2=array(
'0' => array ( 'userId' => 1,'date' => '2011-4-11', 'num' => '2' ),   
'1' => array ( 'userId' => 2,'date' => '2011-4-12', 'num' => '3' ),   
'2' => array ( 'userId' => 6,'date' => '2011-4-13', 'num' => '4'),   
'3' => array ( 'userId' => 3,'date' => '2011-4-13', 'num' => '5'),   
'4' => array ( 'userId' => 1,'date' => '2011-4-12', 'num' => '7'),   
);

怎么去變成
相同userid和data的合並求num的和
$arr1=array(
'0' => array ( 'userId' => 1,'date' => '2011-4-11', 'num' => '11' ),   
'1' => array ( 'userId' => 2,'date' => '2011-4-12', 'num' => '6' ),   
'2' => array ( 'userId' => 6,'date' => '2011-4-13', 'num' => '8'),   
'3' => array ( 'userId' => 3,'date' => '2011-4-13', 'num' => '10'),   
'4' => array ( 'userId' => 1,'date' => '2011-4-12', 'num' => '14'),   
);

10 个解决方案

#1


笨方法是FOREACH兩層 比較USERID和DATE值如果相同就生成把這個NUM相加放到新數組里去。。。。

#2


這個我試過不行,行為數組2中存在有相同的值
'4' => array ( 'userId' => 1,'date' => '2011-4-12', 'num' => '14'。。。。),  
'5' => array ( 'userId' => 1,'date' => '2011-4-12', 'num' => '7'.。。。。),
。。。表示后面還有其他的鍵值而不能被合並。  

#3


那也簡單 首先和那個新數組里的值比較 如果和新數組里的值相同就跟新數組合並 沒有就和另外一個數組合並。。。

#4


與你上一個問題沒有什么區別。
這次寫成函數形式
$arr1=array(
'0' => array ( 'userId' => 1,'date' => '2011-4-11', 'num' => '9' ),   
'1' => array ( 'userId' => 2,'date' => '2011-4-12', 'num' => '3' ),   
'2' => array ( 'userId' => 6,'date' => '2011-4-13', 'num' => '4'),   
'3' => array ( 'userId' => 3,'date' => '2011-4-13', 'num' => '5'),   
'4' => array ( 'userId' => 1,'date' => '2011-4-12', 'num' => '7'),   
);
$arr2=array(
'0' => array ( 'userId' => 1,'date' => '2011-4-11', 'num' => '2' ),   
'1' => array ( 'userId' => 2,'date' => '2011-4-12', 'num' => '3' ),   
'2' => array ( 'userId' => 6,'date' => '2011-4-13', 'num' => '4'),   
'3' => array ( 'userId' => 3,'date' => '2011-4-13', 'num' => '5'),   
'4' => array ( 'userId' => 1,'date' => '2011-4-12', 'num' => '7'),   
);

function Finishing() {
  foreach(func_get_args() as $arr) {
    if(is_array($arr)) {
      foreach($arr as $v) {
        $k = $v['userId'].'_'.$v['date'];
        if(! isset($r[$k]))
          $r[$k] = $v;
        else
          $r[$k]['num'] += $v['num'];
      }
    }
  }
  return array_values($r);
}
print_r(Finishing($arr1, $arr2));


Array
(
    [0] => Array
        (
            [userId] => 1
            [date] => 2011-4-11
            [num] => 11
        )

    [1] => Array
        (
            [userId] => 2
            [date] => 2011-4-12
            [num] => 6
        )

    [2] => Array
        (
            [userId] => 6
            [date] => 2011-4-13
            [num] => 8
        )

    [3] => Array
        (
            [userId] => 3
            [date] => 2011-4-13
            [num] => 10
        )

    [4] => Array
        (
            [userId] => 1
            [date] => 2011-4-12
            [num] => 14
        )

)

#5


引用 4 樓 xuzuning 的回復:
與你上一個問題沒有什么區別。
這次寫成函數形式
PHP code
$arr1=array(
'0' => array ( 'userId' => 1,'date' => '2011-4-11', 'num' => '9' ),   
'1' => array ( 'userId' => 2,'date' => '2011-4-12', 'num' => '3' ),   
'2' => a……

學習了!

#6


引用 4 樓 xuzuning 的回復:
與你上一個問題沒有什么區別。
這次寫成函數形式

PHP code
$arr1=array(
'0' => array ( 'userId' => 1,'date' => '2011-4-11', 'num' => '9' ),   
'1' => array ( 'userId' => 2,'date' => '2011-4-12', 'num' => '3' ),   
'2' ……

寫的好啊。。。。。。

#7


謝謝!~~~

#8


這樣更直觀:

$arr1=array(
'0' => array ( 'userId' => 1,'date' => '2011-4-11', 'num' => '9' ),   
'1' => array ( 'userId' => 2,'date' => '2011-4-12', 'num' => '3' ),   
'2' => array ( 'userId' => 6,'date' => '2011-4-13', 'num' => '4'),   
'3' => array ( 'userId' => 3,'date' => '2011-4-13', 'num' => '5'),   
'4' => array ( 'userId' => 1,'date' => '2011-4-12', 'num' => '7'),   
);
$arr2=array(
'0' => array ( 'userId' => 1,'date' => '2011-4-11', 'num' => '2' ),   
'1' => array ( 'userId' => 2,'date' => '2011-4-12', 'num' => '3' ),   
'2' => array ( 'userId' => 6,'date' => '2011-4-13', 'num' => '4'),   
'3' => array ( 'userId' => 3,'date' => '2011-4-13', 'num' => '5'),   
'4' => array ( 'userId' => 1,'date' => '2011-4-12', 'num' => '7'),   
);
function arrayMerge($array1,$array2){
$num = count($array1);
$newarr = array();
for($i=0;$i<$num;$i++){
if(!(strcasecmp($array1[$i]['userId'], $array2[$i]['userId'])||strcasecmp($array1[$i]['date'], $array2[$i]['date']))){
$newarr[$i]['userId'] = $array1[$i]['userId'];
$newarr[$i]['date'] = $array1[$i]['date'];
$newarr[$i]['num'] = $array1[$i]['num']+$array2[$i]['num'];
}
}
return $newarr;
}
print_r(arrayMerge($arr1,$arr2));


Array
(
  [0] => Array
  (
  [userId] => 1
  [date] => 2011-4-11
  [num] => 11
  )

  [1] => Array
  (
  [userId] => 2
  [date] => 2011-4-12
  [num] => 6
  )

  [2] => Array
  (
  [userId] => 6
  [date] => 2011-4-13
  [num] => 8
  )

  [3] => Array
  (
  [userId] => 3
  [date] => 2011-4-13
  [num] => 10
  )

  [4] => Array
  (
  [userId] => 1
  [date] => 2011-4-12
  [num] => 14
  )

)

#9


引用 4 樓 xuzuning 的回復:
與你上一個問題沒有什么區別。
這次寫成函數形式

PHP code
$arr1=array(
'0' => array ( 'userId' => 1,'date' => '2011-4-11', 'num' => '9' ),   
'1' => array ( 'userId' => 2,'date' => '2011-4-12', 'num' => '3' ),   
'2' ……

精彩

#10


引用 4 樓 xuzuning 的回復:
與你上一個問題沒有什么區別。
這次寫成函數形式
PHP code
$arr1=array(
'0' => array ( 'userId' => 1,'date' => '2011-4-11', 'num' => '9' ),   
'1' => array ( 'userId' => 2,'date' => '2011-4-12', 'num' => '3' ),   
'2' => ar……


很精彩

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: