高级取消设置值形式数组 PHP
advanced unset the value form array PHP
我有两个数组,什么是数组。我需要递归合并这些数组。但是这个动作我需要做几次,
array_merge_recursive()
将追加我的数据两次,我想删除目标数组中已经存在的元素。
$消息数组:
array(2) {
["messages"]=>
array(2) {
["test.testik"]=>
string(13) "Це тест"
["test2313.tes31231tik"]=>
string(23) "це тестончик"
}
["validators"]=>
array(4) {
["valid.validik"]=>
string(36) "Це валідне значення"
["joga.jimbo"]=>
string(27) "Джімбо торбінс"
["validka.invalidka"]=>
string(23) "це інвалідка"
["smith.john"]=>
string(17) "джон сміт"
}
}
$allCar数组:
array(2) {
["messages"]=>
array(1) {
["test2313.tes31231tik"]=>
string(23) "це тестончик"
}
["validators"]=>
array(2) {
["validka.invalidka"]=>
string(23) "це інвалідка"
["smith.john"]=>
string(17) "джон сміт"
}
}
我写了一些代码:
foreach ($messages as $domain => $messagesArray) {
foreach ($allCat as $d => $mess) {
if ($domain == $d) {
foreach ($messagesArray as $ymlkey => $trans) {
foreach ($mess as $ymlk => $transl) {
if ($ymlkey == $ymlk) {
unset($mess[$ymlk]);
}
}
}
}
}
}
然后当我 运行 递归合并时,它将相同的值附加到数组。我做错了什么?
这个:
foreach ($allCat as $d => $mess) {
$mess 是一个临时 COPY 你的 foreach() 循环当前正在处理的任何值。当您稍后执行 unset($mess...)
时,您只是取消设置该临时副本。
虽然有些人可能会建议将 $mess
作为一个引用,但这个 can/will 会在以后引起问题,因为 $mess 在循环结束后仍将是一个引用,并且稍后会重新使用该变量处理循环中最后指向的任何 $mess。
相反,在未设置调用中使用完整的 array/object 路径引用:
unset($messages[$domain][$d][$ymlkey][$ymkl])
或者应该是什么。这样你就可以保证你正在使用实际的 "real" 数组,而不是你的嵌套循环正在创建的许多临时副本中的任何一个。
我有两个数组,什么是数组。我需要递归合并这些数组。但是这个动作我需要做几次,
array_merge_recursive()
将追加我的数据两次,我想删除目标数组中已经存在的元素。 $消息数组:
array(2) {
["messages"]=>
array(2) {
["test.testik"]=>
string(13) "Це тест"
["test2313.tes31231tik"]=>
string(23) "це тестончик"
}
["validators"]=>
array(4) {
["valid.validik"]=>
string(36) "Це валідне значення"
["joga.jimbo"]=>
string(27) "Джімбо торбінс"
["validka.invalidka"]=>
string(23) "це інвалідка"
["smith.john"]=>
string(17) "джон сміт"
}
}
$allCar数组:
array(2) {
["messages"]=>
array(1) {
["test2313.tes31231tik"]=>
string(23) "це тестончик"
}
["validators"]=>
array(2) {
["validka.invalidka"]=>
string(23) "це інвалідка"
["smith.john"]=>
string(17) "джон сміт"
}
}
我写了一些代码:
foreach ($messages as $domain => $messagesArray) {
foreach ($allCat as $d => $mess) {
if ($domain == $d) {
foreach ($messagesArray as $ymlkey => $trans) {
foreach ($mess as $ymlk => $transl) {
if ($ymlkey == $ymlk) {
unset($mess[$ymlk]);
}
}
}
}
}
}
然后当我 运行 递归合并时,它将相同的值附加到数组。我做错了什么?
这个:
foreach ($allCat as $d => $mess) {
$mess 是一个临时 COPY 你的 foreach() 循环当前正在处理的任何值。当您稍后执行 unset($mess...)
时,您只是取消设置该临时副本。
虽然有些人可能会建议将 $mess
作为一个引用,但这个 can/will 会在以后引起问题,因为 $mess 在循环结束后仍将是一个引用,并且稍后会重新使用该变量处理循环中最后指向的任何 $mess。
相反,在未设置调用中使用完整的 array/object 路径引用:
unset($messages[$domain][$d][$ymlkey][$ymkl])
或者应该是什么。这样你就可以保证你正在使用实际的 "real" 数组,而不是你的嵌套循环正在创建的许多临时副本中的任何一个。