咱们在开发中,有时候会将两个数组合并连接起来,这个时候要留神了,千万不要偷懒间接应用+号哦,为什么呢?咱们看看以下代码:
<code class="php"> $a = [1, 2]; $b = [4, 5, 6]; $c = $a + $b; print_r($c);
请用第一间接通知我它的后果是什么?或者我这么问你应该能猜到,它的后果是:
<code class="php"> Array ( [0] => 1 [1] => 2 [2] => 6 )
看进去了吧,用+号操作符连贯的数组,后果取的是并集。也就是依据键,雷同键的不会笼罩,没有键退出进来造成一个新数组。并不是将两个数组真的加起来。
如果咱们用$b+$a呢?那么后果就是$b的内容。
<code class="php"> $c = $b + $a; print_r($c); Array ( [0] => 4 [1] => 5 [2] => 6 )
那么咱们要取得1,2,4,5,6这样一个数组要怎么办呢?没错,应用array_merge()函数,请留神数组Key的地位:
<code class="php"> $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中没有键将合并过去,雷同的键将不解决。
<code class="php"> $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()函数的后果和应用+号的后果是一样的,这是因为他们还是进行了键的比照。所以合并后的数组不会减少内容,如果是未定义下标的则会间接以数字下标增加进去。
最初,咱们再试试.操作符的连贯:
<code class="php"> $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
各自媒体平台均可搜寻【硬核项目经理】