Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 比较两个多维数组并基于匹配键替换值_Php_Arrays_Multidimensional Array - Fatal编程技术网

Php 比较两个多维数组并基于匹配键替换值

Php 比较两个多维数组并基于匹配键替换值,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有两个不同长度的数组: $array1 = Array ( [0] => Array ( ['_id'] => "Group1" ['M'] => 0 ['F'] => 0 ) [1] => Array ( ['_id'] => "Group2" ['M'] => 0

我有两个不同长度的数组:

$array1 = Array
(
    [0] => Array
        (
            ['_id'] => "Group1"
            ['M'] => 0
            ['F'] => 0
        )
    [1] => Array
        (
            ['_id'] => "Group2"
            ['M'] => 0
            ['F'] => 0
        )
    [2] => Array
        (
            ['_id'] => "Group3"
            ['M'] => 0
            ['F'] => 0
        )
    [3] => Array
        (
            ['_id'] => "Group4"
            ['M'] => 0
            ['F'] => 0
        )
)


$array2 = Array
(
    [0] => Array
        (
            ['_id'] => "Group2"
            ['M'] => 180
            ['F'] => 200
        )
    [1] => Array
        (
            ['_id'] => "Group4"
            ['M'] => 360
            ['F'] => 500
        )
)
我想比较数组和中[''u id']的值,如果它们匹配,我将根据相应的[''u id]将数组1中['M']和['F']的值替换为数组2中的值

所以我想要的输出是:

$array1 = Array
(
    [0] => Array
        (
            ['_id'] => "Group1"
            ['M'] => 0
            ['F'] => 0
        )
    [1] => Array
        (
            ['_id'] => "Group2"
            ['M'] => 180
            ['F'] => 200
        )
    [2] => Array
        (
            ['_id'] => "Group3"
            ['M'] => 360
            ['F'] => 500
        )
    [3] => Array
        (
            ['_id'] => "Group4"
            ['M'] => 0
            ['F'] => 0
        )
)
这是我的代码,但我似乎无法用新值替换这些值。这些值仍然与以前相同

foreach ($array1 as $defArr)
{
  foreach ($array2 as $dayArr)
  {
    if($dayArr['_id'] == $defArr['_id'])
    {
      $defArr['M'] = $dayArr['M'];
      $defArr['F'] = $dayArr['F'];
    }
  }
}

在处理数组时,您希望获得有关php数组函数的帮助。我已经使用了此



在处理数组时,您希望获得有关php数组函数的帮助。我已经使用了此功能

这可以是一个字符的更改:

foreach ($array1 as $defArr)

foreach ($array1 as &$defArr)
#                   ^
&
引用运算符指向
foreach
循环上下文中的原始子数组,而不是临时变量

但是,显式使用索引更安全一些:

foreach ($array1 as $i => $defArr) {
    foreach ($array2 as $j => $dayArr) {
        if ($dayArr['_id'] == $defArr['_id']) {
            $array1[$i]['M'] = $array2[$j]['M'];
            $array1[$i]['F'] = $array2[$j]['F'];
        }
    }
}
如果速度很重要或
$array2
很大,则算法的时间复杂度为O(n*m)。我建议使用哈希
$array2
进行如下快速查找(O(n)):


这可以是一个字符的更改:

foreach ($array1 as $defArr)

foreach ($array1 as &$defArr)
#                   ^
&
引用运算符指向
foreach
循环上下文中的原始子数组,而不是临时变量

但是,显式使用索引更安全一些:

foreach ($array1 as $i => $defArr) {
    foreach ($array2 as $j => $dayArr) {
        if ($dayArr['_id'] == $defArr['_id']) {
            $array1[$i]['M'] = $array2[$j]['M'];
            $array1[$i]['F'] = $array2[$j]['F'];
        }
    }
}
如果速度很重要或
$array2
很大,则算法的时间复杂度为O(n*m)。我建议使用哈希
$array2
进行如下快速查找(O(n)):

可能重复的可能重复的