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)):
可能重复的可能重复的