在PHP中,为第二个数组中的每个匹配ID向第一个数组添加值

在PHP中,为第二个数组中的每个匹配ID向第一个数组添加值,php,arrays,sorting,multidimensional-array,Php,Arrays,Sorting,Multidimensional Array,我有两个这样的阵列: 阵列1 $array1 = Array ( 0 => Array ( 'ID' => 101, 'Code' => 1075, 'Date' => '2012-03-03 17:13:12.433' ), 1 => Array ( 'ID' => 103,

我有两个这样的阵列:

阵列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);
使用上述代码的电流输出为:

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
        )

    [1] => Array
        (
            [ID] => 103
            [Code] => 175
            [Date] => 2012-09-05 20:30:02.217
            [Amount] => 1342
        )

    [2] => Array
        (
            [ID] => 109
            [Code] => 178
            [Date] => 2012-07-05 20:30:02.217
            [Amount] => 0
        )

)
但是由于在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添加行。
如何修改当前代码,使其提供所需的输出?

使结果数组成为由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;
        }
    }
}

将结果数组设置为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;
        }
    }
}
$arr2=array\u列($array2,“ID”);
$finalArray=array();
foreach($array1作为$arr){
//获取array2.中存在的ID的索引,并存储在搜索变量中。
$search=array_key($arr2,$arr['ID']);
如果(!$search){
//如果ID未在array-2中退出,则获取该ID的索引并存储在搜索变量中。
$key=数组搜索(0,$arr2);
$search[0]=$key;
未设置($array2[$key]['ID']);
}
//获取搜索项并合并。
foreach($value搜索){
$finalArray[]=数组合并($arr,$array2[$value]);
}
}
回声“;
打印费($finalArray);
$arr2=array\u列($array2,“ID”);
$finalArray=array();
foreach($array1作为$arr){
//获取array2.中存在的ID的索引,并存储在搜索变量中。
$search=array_key($arr2,$arr['ID']);
如果(!$search){
//如果ID未在array-2中退出,则获取该ID的索引并存储在搜索变量中。
$key=数组搜索(0,$arr2);
$search[0]=$key;
未设置($array2[$key]['ID']);
}
//获取搜索项并合并。
foreach($value搜索){
$finalArray[]=数组合并($arr,$array2[$value]);
}
}
回声“;
打印费($finalArray);

我不想键入列名,因为可以有任意数量的列。我传递ID只有其他列被动态添加我已经更新了ID,以循环遍历
$array2
中的所有列并将它们全部添加。我不想键入列名,因为可以有任意数量的列。我传递ID只有其他列被动态添加我已经更新了它,在
$array2
中循环所有列并将它们全部添加起来。是的,我会尝试是的,我会尝试