欢迎光临散文网 会员登陆 & 注册

php如何实现数组合并但键值相同的数组不互相覆盖?文末有惊喜哦~~~

2023-08-20 14:22 作者:欢喜姑娘a  | 我要投稿

一、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



php如何实现数组合并但键值相同的数组不互相覆盖?文末有惊喜哦~~~的评论 (共 条)

分享到微博请遵守国家法律