我有两个带数字键的数组。这是一个小例子:
$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;
将密钥转换回数字。
基本上,我想合并这两个数组。我想唯一的解决方案是找到一种方法将密钥从数字转换为字符串数据类型 如果你能另外解释“自动转换”的话,那么我将完全满意。
答案 0 :(得分:3)
您可以在两个阵列上使用+
运算符,如下所示:
$test_a = array(1 => 'one', 2 => '二');
$test_b = array(2 => 'two', 4 => 'four');
var_dump( $test_b + $test_a);
array(3) {
[2]=>
string(3) "two"
[4]=>
string(4) "four"
[1]=>
string(3) "one"
}
它不是您要查找的确切顺序,但您可以使用ksort()
按get the exact output的键排序。您所称的“自动转换”实际上称为类型强制,在PHP中称为type juggling。
答案 1 :(得分:0)
简单地说,我这样做了:
foreach($new as $k => $v)
{
$old[$k] = $v;
}
// This will overwrite all values in OLD with any existing
// matching value in NEW
// And keep all non matching values from OLD intact.
// No reindexing, and complete overwrite
// Working with all kind of data