PHP的整数键array_merge_recursive行为 [英] PHP's array_merge_recursive behaviour on integer keys

查看:154
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆