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

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

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

PHP
狐的传说 2021-08-27 09:46:48
我有两个这样的数组:数组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);    }    unset($array2[$key]['ID']);    $finalArray[] =     array_merge($arr,$array2[$key]);}print_r($finalArray);但是因为在array2 中有两个 ID 为 101 的条目,但上面的代码只采用匹配 ID 的第一个匹配项。预期的输出是:期望输出   Array(    [0] => Array        (            [ID] => 101            [Code] => 1075            [Date] => 2012-03-03 17:13:12.433            [Amount] => 1234 //amount for first entry of ID 101        )    [1] => Array        (            [ID] => 101            [Code] => 1075            [Date] => 2012-03-03 17:13:12.433            [Amount] => 5656//amount for second entry of ID 101        )    [2] => Array        (            [ID] => 103            [Code] => 175            [Date] => 2012-09-05 20:30:02.217            [Amount] => 1342        )    [3] => Array        (            [ID] => 109            [Code] => 178            [Date] => 2012-07-05 20:30:02.217            [Amount] => 0        ))我无法弄清楚要使用什么循环。代码应该为 array2 的每个匹配 ID 添加行。如何修改我当前的代码,以便它为我提供所需的输出?
查看完整描述

2 回答

?
回首忆惘然

TA贡献1847条经验 获得超11个赞

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


$finalArray = array();

foreach($array1 as $arr){


    //Get the index of ID which exist in array2. And store in search variable.

    $search = array_keys($arr2, $arr['ID']);


    if(!$search){

        //If ID not exit in array-2, get the index of that ID and store in search variable. 

         $key = array_search(0, $arr2);

         $search[0] = $key;

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

    }


    //Fetch search item and merge.

    foreach($search as $value){

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

    }

}


echo "<pre>";

print_r($finalArray);


查看完整回答
反对 回复 2021-08-27
?
万千封印

TA贡献1891条经验 获得超3个赞

使结果数组成为以 ID 为键的关联数组。您可以将第一个数组的元素复制到结果中,然后添加第二个数组中的数量。


$finalResult = [];

foreach ($array1 as $arr) {

    $finalResult[$arr['ID']] = $arr;

}

foreach ($array2 as $row) {

    $id = $row['ID'];

    unset($row['ID']);

    foreach ($row as $col => $value) {

        if (empty($finalResult[$id][$col])) {

            $finalResult[$id][$col] = $value;

        } else {

            $finalResult[$id][$col] += $value;

        }

    }

}


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

添加回答

举报

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