咱们在开发中,有时候会将两个数组合并连接起来,这个时候要留神了,千万不要偷懒间接应用 + 号哦,为什么呢?咱们看看以下代码:
$a = [1, 2];
$b = [4, 5, 6];
$c = $a + $b;
print_r($c);
请用第一间接通知我它的后果是什么?或者我这么问你应该能猜到,它的后果是:
Array
([0] => 1
[1] => 2
[2] => 6
)
看进去了吧,用 + 号操作符连贯的数组,后果取的是并集。也就是依据键,雷同键的不会笼罩,没有键退出进来造成一个新数组。并不是将两个数组真的加起来。
如果咱们用 $b+$a 呢?那么后果就是 $b 的内容。
$c = $b + $a;
print_r($c);
Array
([0] => 4
[1] => 5
[2] => 6
)
那么咱们要取得 1,2,4,5,6 这样一个数组要怎么办呢?没错,应用 array_merge() 函数,请留神数组 Key 的地位:
$c = array_merge($a, $b);
print_r($c);
Array
([0] => 1
[1] => 2
[2] => 4
[3] => 5
[4] => 6
)
$c = array_merge($b, $a);
print_r($c);
Array
([0] => 4
[1] => 5
[2] => 6
[3] => 1
[4] => 2
)
如果是 key/value 模式的 Hash 数组呢?后果也是一样的,$a 中没有键将合并过去,雷同的键将不解决。
$a = ['a' => 1, 'b' => 2];
$b = ['a' => 4, 'b' => 5, 'c' => 6];
print_r($a+$b);
Array
([a] => 1
[b] => 2
=> 6
)
$c = array_merge($a, $b);
print_r($c);
$c = array_merge($b, $a);
print_r($c);
Array
([a] => 1
[b] => 2
=> 6
)
Array
([a] => 4
[b] => 5
=> 6
)
Array
([a] => 1
[b] => 2
=> 6
)
上述 Hash 数组,应用 array_merge() 函数的后果和应用 + 号的后果是一样的,这是因为他们还是进行了键的比照。所以合并后的数组不会减少内容,如果是未定义下标的则会间接以数字下标增加进去。
最初,咱们再试试. 操作符的连贯:
$c = $a . $b;
print_r($c);
ArrayArray
好吧,强转成 string 类型的字符串再拼接起来了,并无特地的意义。
测试代码:https://github.com/zhangyue0503/dev-blog/blob/master/php/201911/source/PHP%E4%B8%AD%E7%94%A8%2B%E5%8F%B7%E8%BF%9E%E6%8E%A5%E6%95%B0%E7%BB%84%E7%9A%84%E7%BB%93%E6%9E%9C%E6%98%AF%EF%BC%9F.php
参考文档:https://www.php.net/manual/zh/language.operators.array.php
各自媒体平台均可搜寻【硬核项目经理】