PHP的整数键array_merge_recursive行为 [英] PHP's array_merge_recursive behaviour on integer keys
本文介绍了PHP的整数键array_merge_recursive行为的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
是否有递归合并阵列,以同样的方式为PHP的 array_merge_recursive()
功能确实的除了的该整数键处理的方法相同的字符串键?
Is there an approach for recursively merging arrays, in the same way as PHP's array_merge_recursive()
function does, except that integer keys are treated the same as string keys?
(这是该按键保持语法分析为整数的过程中很重要的。)
(It's important for the process that the keys remain parse-able as integers.)
例如:
$a = array(
'a' => array(1)
);
$b = array(
'a' => array(2, 3)
);
var_dump(array_merge_recursive($a, $b));
将合并的一
键和输出,符合市场预期,如下:
Will merge the on the "a"
key and output, as expected, the following:
array(1) {
["a"] => array(3) {
[0] => int(1)
[1] => int(2)
[2] => int(3)
}
}
然而,使用整数钥匙(即使作为一个字符串)时:
However, when using integers for keys (even when as a string):
$a = array(
'123' => array(1)
);
$b = array(
'123' => array(2, 3)
);
var_dump(array_merge_recursive($a, $b));
array_merge_recursive()
将返回:
array(2) {
[0] => array(3) {
[0] => int(1)
}
[1] => array(2) {
[0] => int(2)
[1] => int(3)
}
}
取而代之的是求之不得的:
Instead of the much desired:
array(1) {
["123"] => array(3) {
[0] => int(1)
[1] => int(2)
[2] => int(3)
}
}
思考?
推荐答案
您可以preFIX用简短的字符串数组键:
you can prefix the array keys with a short string:
function addPrefix($a) {return '_' . $a;}
# transform keys
$array1 = array_combine(array_map('addPrefix', array_keys($array1)), $array1);
$array2 = array_combine(array_map('addPrefix', array_keys($array1)), $array1);
# call array_combine
$array = array_map_recursive($array1, $array2);
# reverse previous operation
function stripPrefix($a) {return substr($a, 1);}
$array = array_combine(array_map('stripPrefix', array_keys($array)), $array)
这篇关于PHP的整数键array_merge_recursive行为的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文