猿问

为 PHP 中第二个数组中的每个匹配 ID 将值的总和添加到第一个数组

我有两个这样的数组:


数组1


$array1 = Array

(

    0 => Array

        (

            'ID' => 101,

            'Code' => 1075,

            'Date' => '2012-03-03 17:13:12.433'

        ),


    1 => Array

        (

            'ID' => 103,

            'Code' => 175,

            'Date' => '2012-09-05 20:30:02.217'

        ),


    2 => Array

        (

            'ID' => 109,

            'Code' => 178,

            'Date' => '2012-07-05 20:30:02.217'

        )


);

阵列2


$array2 = Array

(

    0 => Array

        (

            'Amount' => 1234,

            'ID' => 101

        ),


    1 => Array

        (

            'Amount' => 5656,

            'ID' => 101

        ),

    2 => Array

        (

            'Amount' => 1342,

            'ID' => 103

        ),


    3 => Array

        (

            'Amount' => 0,

            'ID' => 0

        )


);

我正在使用下面的代码对两个数组执行连接:


    $arr2 = array_column($array2, "ID");


    $finalArray = array();

    foreach($array1 as $arr){

        $key = array_search($arr['ID'], $arr2);

        if($key ===false){

            $key = array_search(0, $arr2);

           $array2[$key]['Found'] = "No";


        }

  else {

    $array2[$key]['Found'] = "Yes";

   }

        unset($array2[$key]['ID']);

        $finalArray[] =     array_merge($arr,$array2[$key]);

    }


    print_r($finalArray);

使用上述代码的当前输出是:


最终数组


    Array

(

    [0] => Array

        (

            [ID] => 101

            [Code] => 1075

            [Date] => 2012-03-03 17:13:12.433

            [Amount] => 1234 //considers only the first entry of ID 101 in array2

            [Found] => Yes

        )


    [1] => Array

        (

            [ID] => 103

            [Code] => 175

            [Date] => 2012-09-05 20:30:02.217

            [Amount] => 1342

            [Found] => Yes

        )

)

但是因为在array2 中有两个 ID 为 101 的条目,但上面的代码只采用匹配 ID 的第一个匹配项。

我无法弄清楚如何在此处进行添加。

代码应该为 array2 的每个匹配 ID 添加 Amount 字段,并将该数量合并到 array1 Amount 字段,如上面的预期输出所示。

如何修改我当前的代码,以便它为我提供所需的输出?


呼如林
浏览 163回答 1
1回答

湖上湖

关于什么:$finalArray = array();foreach ($array1 as $arr1){    $amount = 0;    foreach ($array2 as $key2 => $arr2)    {        if ($arr1['ID'] === $arr2['ID'])        {            $amount += $arr2['Amount'];            unset($array2[$key2]);        }    }    $finalArray[] = array_merge($arr1, array(        'Amount'    => $amount,        'Found'     => $amount ? "Yes" : "No"    ));}print_r($finalArray);输出:Array(    [0] => Array        (            [ID] => 101            [Code] => 1075            [Date] => 2012-03-03 17:13:12.433            [amount] => 6890            [found] => Yes        )    [1] => Array        (            [ID] => 103            [Code] => 175            [Date] => 2012-09-05 20:30:02.217            [amount] => 1342            [found] => Yes        )    [2] => Array        (            [ID] => 109            [Code] => 178            [Date] => 2012-07-05 20:30:02.217            [amount] => 0            [found] => No        ))如果您需要任何进一步的解释,请告诉我。
随时随地看视频慕课网APP
我要回答