【问题标题】:add values to first array for each matching ID in the second array in PHP将值添加到 PHP 中第二个数组中每个匹配 ID 的第一个数组
【发布时间】:2019-06-17 18:02:03
【问题描述】:

我有两个这样的数组:

数组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 添加行。 如何修改我当前的代码,以便它给我想要的输出?

【问题讨论】:

    标签: php arrays sorting multidimensional-array


    【解决方案1】:
    $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);
    

    【讨论】:

    • 是的,我会试试的
    【解决方案2】:

    使结果数组成为以 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 其他列被动态添加
    • 我已对其进行了更新,以遍历 $array2 中的所有列并将它们全部加起来。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 2016-11-13
    • 1970-01-01
    • 2012-06-05
    • 2019-09-02
    • 1970-01-01
    相关资源
    最近更新 更多