有两个数组一一对应:
$arr1=array(1,2,2,4,4,6,4,2,8);
$arr2=array(2,3,2,4,3,2,4,2,2);
要输出两个新的数组:
$arr3=array(1,2,4,6,8);
$arr4=array(2,7,11,2,2);
聪明的肯定已经看出规律了,就是第一个数组中如果有重复的数值,就把其对应第二个数组中的数字相加,输出两个新的数组$arr3和$arr4。
$arr1和$arr2数组的值是不确定的,请问用PHP如何实现一个通用的算法实现输出$arr3和$arr4?
再举个例子:
$arr1=array(3,4,3,3,4,4,7);
$arr2=array(2,3,1,1,2,1,1);
要输出两个新的数组:
$arr3=array(3,4,7);
$arr4=array(4,6,1);
看似简单哦,各位高手试试看这个问题。

解决方案 »

  1.   

    $arr1=array(1,2,2,4,4,6,4,2,8);
    $arr2=array(2,3,2,4,3,2,4,2,2);
    function foo($a1, $a2) {
      foreach($a1 as $k=>$v) {
        $t[$v][] = $a2[$k];
      }
      return array(array_keys($t), array_map('array_sum', $t));
    }list($arr3, $arr4) = foo($arr1, $arr2);
      

  2.   

    楼上的很简洁啊
    <?php 
    $arr1=array(1,2,2,4,4,6,4,2,8);
    $arr2=array(2,3,2,4,3,2,4,2,2);
    $rs=array();    
    foreach($arr1 as $key =>$v){    
        $rs[$v][$key]++;      

    $rs2=array();  
    foreach ($rs as $key =>$val){
    $temp = 0;
    foreach ($val as $key2 =>$v){
    $temp +=$arr2[$key2];
    }
    $arr3[] = $key;
    $arr4[]=$temp;
    }
    print_r($arr3); 
    print_r($arr4);
    ?>
      

  3.   

    $rs2=array();  //没用上的定义 - -
      

  4.   

    $arr1=array(1,2,2,4,4,6,4,2,8);
    $arr2=array(2,3,2,4,3,2,4,2,2);
    foreach( $arr1 as $k=>$v)
    {
    $new[$v] += $arr2[$k] ;
    }
    echo "<pre/>";
    print_r( $new );
      

  5.   

    <?php
    $arr1=array(1,2,2,4,4,6,4,2,8);
    $arr2=array(2,3,2,4,3,2,4,2,2);
    function foo($a1, $a2) {
      foreach($a1 as $k=>$v) {
        $t[$v][] = $a2[$k];
      }
      return array(array_keys($t), array_map('array_sum', $t));
    }list($arr3, $arr5) = foo($arr1, $arr2);
    $arr4=array_values($arr5);
    print_r($arr3);
    print_r($arr4);?>
    感谢大家,这样就完美了