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

我有两个这样的数组:

数组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);

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

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
        )

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

)

但是由于在 array2 中有 ID 101 的两个条目,但上面的代码只将第一个匹配项用于匹配 ID

预期的输出是:

期望的输出

   Array
(
    [0] => Array
        (
            [ID] => 101
            [Code] => 1075
            [Date] => 2012-03-03 17:13:12.433
            [Amount] => 6890 //sum of all the amounts(1234+5656)for matching ID 101
            [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
        )

)

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

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

如何修改我当前的代码,以便它给我想要的输出?

【问题讨论】:

    标签: php arrays sorting multidimensional-array


    【解决方案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
            )
    
    )
    

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-22
    • 1970-01-01
    • 2014-03-18
    • 2019-09-02
    • 1970-01-01
    • 2016-11-13
    • 2012-06-05
    相关资源
    最近更新 更多