我有两个带有数字键的数组。这是一个小例子:
$test_a = array(1 => 'one', 2 => '二');
$test_b = array(2 => 'two', 4 => 'four');
我想将它们与 合并array_merge()
以接收$test_c
数组:
$test_c = array(
1 => 'one',
2 => 'two',
4 => 'four'
);
该手册array_merge
提到:
带有数字键的输入数组中的值将使用从结果数组中的零开始的递增键重新编号。
似乎是真的,因为:
$test_c = array_merge($test_a, $test_b);
var_dump($test_c);
返回:
array (size=4)
0 => string 'one' (length=3)
1 => string '二' (length=3)
2 => string 'two' (length=3)
3 => string 'four' (length=4)
我尝试了什么:
我尝试将键转换为字符串:
foreach($test_a as $key => $value) $test_a[(string)($key)] = $value;
...键仍然是数字。
我试过
strval()
:foreach($test_a as $key => $value) $test_a[strval($key)] = $value;
不用找了。键仍然是数字。
我试过这个技巧:
foreach($test_a as $key => $value) $test_a['' . $key . ''] = $value;
也不行。键仍然是数字。
令我惊讶的是,当我发现数组键上有从字符串到数字的自动转换之类的东西时。这将键更改为字符串:
foreach($test_a as $key => $value) $test_a[' ' . $key . ' '] = $value;
当我添加时trim()
:
foreach($test_a as $key => $value) $test_a[trim(' ' . $key . ' ')] = $value;
键被转换回数字。
基本上,我想合并这两个数组。我想唯一的解决方案是找到一种将键从数字转换为字符串数据类型的方法。
如果你能额外解释一下“自动转换”的事情,那我就完全满意了。