Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中,为第二个数组中的每个匹配ID向第一个数组添加值之和_Php_Arrays_Sorting_Multidimensional Array - Fatal编程技术网

在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);
           $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 feild,并将该金额合并到array1 Amount feild,如上面的预期输出所示

如何修改当前代码,使其提供所需的输出?

如何:

$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
        )

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

请检查