php如何实现数组合并但键值相同的数组不互相覆盖?文末有惊喜哦~~~
一、PHP数组基础
(一)、key
1. key只能为integer或string,可同时存在;
2. 包含合法整型值的字符串key会被转化为整型存储,如:‘7’的key会被转化为7存储;
3. 布尔值key会被转化为整型存储,true会被转化为1存储,false会被转化为0存储;
4. null会被转化为空串(‘’)存储;
5. 如果多个key值被转化为相同的值,则只使用最后一个,前面的被覆盖,如:一个数组中依次定义了‘1’、true、1的key,则最后只会存储key为1的value,之前的值都会被覆盖掉;
6. 如果未指定key,则会被自动设定为之前用过的最大的整型key+1,最小为0;
(二)、value
可以为PHP任意类型(字符串、整型、浮点型、布尔型、对象、数组、null、资源类型);
(三)、其他类型转化为数组类型
1. integer、string、float、boolean、resource类型转化为数组类型时,会被自动分配key为0,value为其原值;
2. object类型转化为数组类型时,成员变量名会作为数组key,私有属性的key会加上类名前缀,保护属性的key会加上‘*’前缀,成员变量的值作为value;
3. null会被转化为空数组;
(四)、foreach
1. 两种形式,foreach(arr as $key => $value)与foreach(arr as $value),其中value是值传递,使用&value是引用传递;
2. 遍历依赖数组内部指针;
3. 遍历结束后,value会被保留(在遍历外能够获取到最后value的值),为防止在多次foreach时出现问题,可以在一次foreach后unset($value)或使用不同的变量;
二、三种数组合并方式
目前工作中接触到的PHP数组合并方式主要有三种:
1、+操作符;
2、array_merge();
3、array_merge_recursive();
它们的区别主要体现在对于相关键名(数字键名、字符串键名)的处理方式,下面以两个实际例子来提现:
(一)、相同数字键名
<?php $arrFirst = [ 111 => "first", 222 => "first", "first" //会指定默认的数字键223 ]; $arrSecond = [ 111 => "second", 333 => "second", "second" //会指定默认的数字键334 ]; //对于重复的数字键,+操作后,前面数组的键值会覆盖后面的,保留之前数字键 var_dump("array + result:", $arrFirst + $arrSecond); //对于重复的数字键,array_merge后,重排数字键(字符串键不变),不会覆盖 var_dump("array_merge result:", array_merge($arrFirst, $arrSecond)); //对于重复的数字键,array_merge_recursive后,重排数字键(字符串键不变),不会覆盖 var_dump("array_merge_recursive result:", array_merge_recursive($arrFirst, $arrSecond)); ?>
运行结果:

编辑
(二)、相同字符串键
<?php $arrFirst = [ "first_key" => 1, "second_key" => 1, "third_key" => 1, ]; $arrSecond = [ "first_key" => 2, "second_key" => 2, "fourth_key" => 2, ]; //对于重复的字符串键,+操作后,前面数组的键值会覆盖后面的 var_dump("array + result:", $arrFirst + $arrSecond); //对于重复的字符串键,array_merge后,后面数组的键值会覆盖前面的 var_dump("array_merge result:", array_merge($arrFirst, $arrSecond)); //对于重复的字符串键,array_merge_recursive后,相同键名的键值会被合并到同一数组中(会递归) var_dump("array_merge_recursive result:", array_merge_recursive($arrFirst, $arrSecond)); ?>
运行结果:

这里有一份 JetBrains 的激活方法,有需要的来取了!
链接:https://pan.baidu.com/s/1jxvnKgTsTbkVmjcPGeTm0g
提取码:2cg8