当前位置: 首页> 技术教程> 正文

php加入数组,php 数组合并

宁旺春土特产品

在PHP的日常开发过程中,数组是承载和处理批量数据的核心结构,无论是从数据库查询得到的结果集、表单提交的多组参数,还是接口响应返回的结构化数据,最终都会以数组的形式被开发者操作和管理。而向数组中添加元素、将多个数组合并为一个整体,更是数组操作里最基础也最高频的需求,不同的添加和合并方式,在执行效率、键名处理、数值索引重置等方面都存在明显差异,开发者只有理清每种方式的适用场景和底层逻辑,才能在项目开发中写出更高效、更不易出bug的代码。

php加入数组,php 数组合并

先来看向PHP数组中加入元素的几种常用方式,最基础的当属使用数组下标直接赋值,比如我们有一个存储用户名称的数组$users = ['张三', '李四'],想要添加新用户“王五”时,只需要写$users[] = '王五'即可,这种方式会自动为新元素分配下一个连续的整数索引,无需开发者手动计算下标,非常适合索引数组的末尾追加操作。如果需要指定键名添加元素,无论是关联数组还是给索引数组指定特定下标,都可以直接通过$array['key'] = $value的形式赋值,比如$userInfo['age'] = 25,这种方式会直接覆盖同名键的已有值,如果键不存在则新增,是关联数组添加元素最直接的手段。

除了直接赋值,array_push函数也是很多开发者常用的数组追加方法,它的作用是将一个或多个元素压入数组的末尾,相当于多次执行$array[] = $value的操作,语法为array_push($array, $value1, $value2, ...)。需要注意的是,array_push是有返回值的,执行后会返回新数组的总长度,如果只是添加单个元素,使用$array[] = $value的效率要比array_push更高,因为直接赋值不需要调用函数,减少了函数调用的开销,只有在一次性添加多个元素时,array_push才会比多次写直接赋值更简洁。与array_push相对的还有array_unshift函数,它可以将元素添加到数组的开头,不过这个操作会导致数组中已有的数值索引全部重新计数,关联数组的字符串键则不受影响,因此在处理大数组时要谨慎使用array_unshift,避免不必要的性能损耗。

说完单个数组的元素添加,再来看PHP中数组合并的相关操作,最常用的合并函数当属array_merge,它可以接收一个或多个数组作为参数,将后面数组中的元素追加到前面数组的后面,最终返回合并后的新数组。array_merge在处理键名时有明确的规则:如果是字符串键名,后面数组中相同键名的元素会覆盖前面数组的元素;如果是数值键名,后面数组的元素不会覆盖前面的,而是会按照顺序追加,并且所有的数值键都会被重新索引,从0开始依次排列。比如我们有两个数组$arr1 = ['a' => 1, 2, 3],$arr2 = ['a' => 4, 5, 'b' => 6],用array_merge合并后得到的结果是['a' => 4, 0 => 2, 1 => 3, 2 => 5, 'b' => 6],从中可以清晰看到字符串键“a”被后面的值覆盖,数值键则全部重新排序。

很多开发者会混淆array_merge和“+”运算符的数组合并效果,实际上二者的逻辑完全相反,使用“+”运算符合并数组时,是将右边的数组追加到左边数组之后,但对于相同键名的元素,会保留左边数组的值,右边数组的同键元素会被直接丢弃,而且无论字符串键还是数值键,都遵循“左侧优先”的原则,同时数值索引不会被重置。比如还是用上面的$arr1和$arr2,用$arr1 + $arr2得到的结果是['a' => 1, 0 => 2, 1 => 3, 'b' => 6],字符串键“a”保留了左边的1,数值键0和1也保留了左边的2和3,右边数组中索引0对应的5被丢弃了,这种方式适合想要保留第一个数组原有键值,只补充第二个数组中不存在的键的场景。

如果需要更精准地控制数组合并的规则,还可以使用array_merge_recursive函数,它和array_merge的区别在于,当遇到相同的字符串键名时,不会直接覆盖,而是将两个值合并成一个新的数组,如果值本身就是数组,还会继续递归合并。比如$arr1 = ['user' => ['name' => '张三', 'age' => 20]],$arr2 = ['user' => ['name' => '李四', 'sex' => '男']],用array_merge_recursive合并后,得到的结果是['user' => ['name' => ['张三', '李四'], 'age' => 20, 'sex' => '男']],相同的“name”键下的两个值被组合成了一个数组,而不是直接覆盖,这种方式在处理多维数组的合并,尤其是配置文件合并、接口数据聚合时非常实用。

在实际开发中,我们还经常会遇到需要将多个数组合并,并且保留所有元素的键名、不重置索引的场景,这时候可以结合循环遍历的方式手动合并,比如使用foreach遍历第二个数组,将每个元素以原键名添加到第一个数组中,这样既可以自定义覆盖规则,也能避免内置函数的默认行为带来的意外问题。比如在处理用户提交的表单数据和默认配置数组合并时,用array_merge可以让用户提交的值覆盖默认值,而如果想要默认值覆盖用户提交的缺失字段,就可以调换两个数组的顺序,或者使用“+”运算符,根据具体的业务需求选择合适的合并方式,才是高效开发的

PC右下角
wap底部