【发布时间】:2017-03-13 09:39:36
【问题描述】:
$php -a
php > $data1 = ['tag' => 'div', 'classes' => [1,2,3]];
php > $data2 = ['tag' => 'section', 'classes' => [2,3,4,5,6]];
php > $result = array_merge_recursive($data1, $data2);
php > print_r($result);
Array
(
[tag] => Array
(
[0] => div
[1] => section
)
[classes] => Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 2
[4] => 3
[5] => 4
[6] => 5
[7] => 6
)
)
如Docs中所述:
如果输入数组具有相同的字符串键,则这些键的值将合并到一个数组中[…]
PHP 中是否有一个现有的函数基本上做同样的事情,但没有将相同的键合并到一个数组中,以便覆盖值并保留键?
在这种情况下,我希望得到这样的结果:
Array
(
[tag] => section
[classes] => Array
(
[0] => 1
[1] => 2
[2] => 3
[5] => 4
[6] => 5
[7] => 6
)
)
关于@JustOnUnderMillions 的评论:
是的,我想知道,这不是我对这样一个函数的期望,我希望得到我正在寻找的结果。
【问题讨论】:
-
如果这些值被覆盖,那么您的结果将是
$data2 -
对于
classes键中的数组:如果覆盖值并保留键 那么您将无法获得这样的结果([0] => 1 [1] => 2 [2] => 3 [5] => 4 [6] => 5 [7] => 6),它'将是( [0] => 2 [1] => 3 [2] => 4 [3] => 5 [4] => 6 ) -
你需要递归合并吗?
-
是的,这很重要
-
请注意:没有人想知道为什么该函数不创建像
[['tag']=>['div','section'],'classes'=>[[1,2,3],[/*...*/]]]这样的数组吗?这对于 php 来说很典型,它会合并到 vlaues 到一个数组中,但是如果你首先有数组,它们将被合并在一起?!?假设第二个有'classes'=>'string'字符串将被合并到给定的第一个数组中。所以现在关于更多的子数组(rekursive!!)。那是怎么工作的......我不明白,所以我尽量不使用它。