doucheng5705 2015-04-27 06:43
浏览 13
已采纳

使用其他键[close]对两个数组的键值求和

Array
(
    [0] => Array
        (
            [amount] => 8000
            [date] => 2015-04-01
        )

    [1] => Array
        (
            [amount] => 5000
            [date] => 2015-04-02
        )

    [2] => Array
        (
            [amount] => 5000
            [date] => 2015-04-10
        )

    [3] => Array
        (
            [amount] => 25000
            [date] => 2015-04-20
        )

)


Array
(
    [0] => Array
        (
            [date] => 2015-04-01
            [amount] => 1000
        )

    [1] => Array
        (
            [date] => 2015-04-02
            [amount] => 5000
        )

    [2] => Array
        (
            [date] => 2015-04-03
            [amount] => 2000
        )

    [3] => Array
        (
            [date] => 2015-04-10
            [amount] => 2000
        )

)

I have two arrays with keys and values. sum the 'amount' key if 'date' key values is same

Expected output:

Array
(
    [0] => Array
        (
            [date] => 2015-04-01
            [amount] => 9000
        )

    [1] => Array
        (
            [date] => 2015-04-02
            [amount] => 10000
        )

    [2] => Array
        (
            [date] => 2015-04-03
            [amount] => 2000
        )

    [3] => Array
        (
            [date] => 2015-04-10
            [amount] => 7000
        )
    [4] => Array
        (
            [date] => 2015-04-20
            [amount] => 25000
        )
)
  • 写回答

1条回答 默认 最新

  • douruobokui58233 2015-04-27 07:20
    关注

    This is your solution -

    <?php
    $array_result = array();
    
    $array1=array(  // your first array
    
    0 => Array
            (
                'amount' => 8000,
                'date' => '2015-04-01'
            ),
    
    1 => Array
        (
            'amount' => 5000,
            'date' => '2015-04-02'
        ),
    
    2 => Array
        (
            'amount' => 5000,
            'date' => '2015-04-10'
        ),
    
    3 => Array
        (
            'amount' => 25000,
            'date' => '2015-04-20'
        )
    );
    
    $array2=array(  // your second array
    
    0 => Array
            (
                'date' => '2015-04-01',
                'amount' => 1000
            ),
    
    1 => Array
        (
            'date' =>'2015-04-02',
            'amount' => 5000
        ),
    
    2 => Array
        (
            'date' => '2015-04-03',
            'amount' => 2000
        ),
    
    3 => Array
        (
            'date' => '2015-04-10',
            'amount' => 2000
        )
    );
    
    $array_result = $array2; // default value of result will be array2
    
    function recursive_array_search($needle,$haystack) {
        foreach($haystack as $key=>$value) {
            $current_key=$key;
            if($needle===$value OR (is_array($value) && recursive_array_search($needle,$value) !== false)) {
                return $current_key;
            }
        }
        return false;
    }
    
    foreach( $array1 as $k1=>$val1  ) {
        $is_exist = recursive_array_search($val1['date'], $array_result);
        if( $is_exist !== false )
        {
            $array_result[ $is_exist ]['amount']+=$val1['amount'];
        } else {
            $array_result[]=$val1;
        }
    }
    
    echo "<pre>"; print_r( $array_result );
    
    ?>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?