PHP数组合并

PHP数组合并很多时候我们要把多个数组进行合并,在php函数库中合并函数有:直接合并:array_merge,array_merge_recursive;间接合并:array_map,array_filter等可以使用匿名函数的方法还有一种合并方式,那就是+这个实际就是一种运算,但在很多时候它能完成直接合并不能完成的数组合并。在这里不对间接合并作说明,因为…

大家好,又见面了,我是你们的朋友全栈君。

很多时候我们要把多个数组进行合并,在php函数库中合并函数有:

直接合并:array_merge,array_merge_recursive;

间接合并:array_map,array_filter等可以使用匿名函数的方法

还有一种合并方式,那就是 + 这个实际就是一种运算,但在很多时候它能完成直接合并不能完成的数组合并。

在这里不对间接合并作说明,因为间接数据已经类似foreach循环处理。

wKiom1SSZ7Ow4sV-AAJdJwbCYeg922.jpg

array_merge_recursive 函数是针对多个数组合并但不能丢失每一个元素

wKiom1SSZ7Oj3NCYAAIUeaqurfw488.jpg

array_merge 函数是针对多个数组合并只要后面有重复的就覆盖前面的。


array_merge_recursive,array_merge这两个函数在合并数字下标或索引下标时是不会覆盖,而是重写原标下为默认索引下标按每个数组元素先后顺序追加到合并新数组中去,所以当待合并数组中需要覆盖数字下标的元素时这两个函数就不能直接合并了,要么给把下标修改成不纯数字,要么使用循环语句,或者使用 +

+ 运算在处理数组时,必须保证两边的运算值都是数组,注意:+前面的数组会覆盖后面数组相同键名的值,这个与函数调用正好相反

例如:

wKiom1ST6JWwnfyzAAGU3xw4nYQ281.jpg

$arr与$arr1是两个混合数组,结构相同,只是数据有些差别,通过上面不同方式合并结果完全不相同,合并后主要看点是数组中下标为test2与123的合并结果变化。


函数 array_merge 合并存在覆盖元素,但对于索引元素只会累加而不是覆盖,那它合并后的结果是:

wKioL1ST6WijMsEaAAFPATZPA9c497.jpg


结论:使用array_merge函数对数组进行合并,系统只会对数组的第一层下标进行判断,数字下标的元素会全部保留,并且在不影响元素索引位置重置下标,标下的顺序是从第一个数组开始然后累加后面的数组,字符串类下标系统只保留最后出现下标与元素,不会递归到元素的内层数组中,直接覆盖前面的元素。

函数 array_merge_recursive 合并存在覆盖元素,但对于索引元素只会累加而不是覆盖,那它合并后的结果是:

wKioL1ST6Y_hdLusAAGjnpZfLGg416.jpg

结论:使用array_merge_recursive对数组进行合并,系统只对第一层数字下标的元素进行重置为索引下标并保留原来的位置,字符串类下标元素是不会覆盖,而是递归到内层,递归中有数字下标的停止当前元素递归并重置下标,下标是以当前递归层内第一个数字下标为起点值进行累加,并不全从0开始累加,递归层内最内层的字符串下标出现相同时,会在最小层内创建一个数组并按重复的先后顺序添加到这个数组中去,数组以默认索引下标进行添加

使用$arr + $arr1 运算方式是不会重置下标,所以相同下标的元素都会以+左边的数组为主去覆盖+右边的元素,那运算后的结果是:

wKiom1ST6RegyqE7AAEBqChG0DQ558.jpg

结论:使用+运算合并数组,系统只对运算数组的第一层元素进行严格的下标合并覆盖,运算前面的数组会覆盖后面所有相同下标的元素,并且不会递归到内层,所有数字下标与字符串下标都将进行覆盖操作,并且不会修改下标。


大部分开发中都会使用函数或循环合并数组,其它很多时候使用+会更方便,总结下这三种方式的合并场景:


array_merge :应用在只对字符串下标覆盖(后面出现的覆盖前面出现的元素),数字下标的全部累加且不关注下标是否修改或要求重置默认数字下标,所有的合并只在第一层元素与对应的下标下完成,并不递归到内层元素。


array_merge_recursive :应用在不覆盖任何元素,相同字符串下标的元素会递归到内层并在最小合并层时创建一个数组将重复的元素追加到这个数组中,数字下标的停止当前元素递归合并全部累加到当前层(如果是第一层会重置数字下标为默认索引下标,第二层及更深层不会修改第一个元素的下标值,只会重置第二个及以后的所有当层数字下标以第一个下标为起始下标值累加)且不关注下标是否修改或要求重置默认数字下标。


应用在严格按下标(不区分下标是否与数字或字符串)覆盖,或者下标不相同时累加且不重置下标。

本文转自  ttlxihuan    51CTO博客,原文链接:http://blog.51cto.com/php2012web/1591933


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/151245.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 网络安全渗透高级工具(黑客工具软件大全100套)

    黑客工具软件大全100套1Nessus:最好的UNIX漏洞扫描工具Nessus是最好的免费网络漏洞扫描器,它可以运行于几乎所有的UNIX平台之上。它不止永久升级,还免费提供多达11000种插件(但需要注册并接受EULA-acceptance–终端用户授权协议)。它的主要功能是远程或本地(已授权的)安全检查,客户端/服务器架构,GTK(Linux下的一种图形界面)图形界面,内置脚本语言编译器…

  • LeetCode解题汇总目录

    此篇为学习完《数据结构与算法之美》后,在LeetCode刷题的汇总目录,方便大家查找(Ctrl+Find),一起刷题,一起PK交流!另有解题:《剑指Offer》、《程序员面试金典》、LintCode代码能力测试CAT。如果本文对你有帮助,可以给我点赞加油!通过2021,简单618/636,中等1120/1266,困难283/488

  • dedecms列表页有图调用缩略图无图留空的方法

    dedecms列表页有图调用缩略图无图留空的方法

  • MySql 模糊查询

    MySql 模糊查询实例:SQL模糊查询,使用like比较关键字,加上SQL里的通配符,请参考以下: 1、LIKE’Mc%’将搜索以字母Mc开头的所有字符串(如McBadden)。 2、LIKE’%inger’将搜索以字母inger结尾的所有字符串(如Ringer、Stringer)。 3、LIKE’%en%’将搜索在任何位置包含字母en的所有字符串(如Bennet、Green、Mc…

  • IplImage中的widthStep大小计算及原理[通俗易懂]

    IplImage中的widthStep大小计算及原理[通俗易懂]一直以为IplImage结构体中的widthStep元素大小等于width*nChannels,大错特错!查看OpenCV2.1的源码,在src/cxcore/cxarray.cpp文件中,找到cvInitImageHeader函数,函数中对widthStep大小赋值如下:image->widthStep=(((image->width*image->nChannels*

  • RuntimeException异常

    RuntimeException异常/*Exception中有一个特殊的子类异常RuntimeException(运行时异常)。 *RuntimeException非常特殊,它的的子类也可以直接抛出,不用声明。 *1.如果在函数内容抛出该异常,喊上可以不用声音,编译通过。 *2.如果函数上声明了该异常,调用者可以不用进行处理,编译一样能通过。 *3.之所以不用在函数上声明,因为不需要让调用者处理。 *4

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号