为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
呼如林 2021-08-27 16:41:17
我有两个这样的数组:数组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 字段,如上面的预期输出所示。如何修改我当前的代码,以便它为我提供所需的输出?
查看完整描述

1 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

关于什么:


$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

        )


)

如果您需要任何进一步的解释,请告诉我。


查看完整回答
反对 回复 2021-08-27
  • 1 回答
  • 0 关注
  • 155 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信