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


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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • svn配置忽略文件

    svn配置忽略文件1、添加忽略项项目根目录,找到SVN->右键->属性新建,其它->选择svn:ignore输入要忽略的内容确定即可。2、全局忽略配置svn->右键->设置即可

    2022年9月13日
    5
  • Potplayer + LAVFilters + madVR 配置教程

    Potplayer + LAVFilters + madVR 配置教程文章目录Potplayer+LAVFilters+madVR配置教程工具安装篇设置调教1.potplayer播放器设置加载LAVFilters和madVR1.选择“源滤镜/分离器”选项,选择“滤镜/解码器管理”2.“添加外部滤镜”3.浏览到刚才LAVFilters解压的文件夹,分别添加图示项。4.添加后回到管理界面设置,点击左边的”LAVAudioDecoder”,将右边”音频解码器”…

    2022年5月22日
    303
  • 个人渗透笔记_web渗透

    个人渗透笔记_web渗透【拿shell】1.直接上传aspasajspcerphpaspxhtrcdx格式的木马,不行就利用IIS6.0解析漏洞”:1.asp;1.jpg/1.asp;.jpg/1.asp;jpg/1.asp;.xls2.上传图片木马遇到拦截系统,连图片木马都上传不了,记事本打开图片木马在代码最前面加上gif89a,一般就能逃过拦截系统了。3.上传图片木马把地址复制到数据库

    2022年9月21日
    2
  • 零基础学Java(2)数据类型与变量

    零基础学Java(2)数据类型与变量前言Java是一种强类型语言。这就意味着必须为每一个变量声明一种类型。在Java中,一共8种基本类型,其中有4种整型、2种浮点型、1种字符串类型char(用于表示Unicode编码的代码单元)和1种

    2022年7月31日
    7
  • tcping在linux用法,tcping的安装和使用[通俗易懂]

    tcping在linux用法,tcping的安装和使用[通俗易懂]Tcping网上比较少资料是关于linux对tcp端口ping测试的方法,我这里简单介绍2种方法:1.yum安装,编译安装方法1-1.wgethttp://linuxco.de/tcping/tcping-1.3.5.tar.gz###下载tcping1-2tarzxvftcping-1.3.5.tar.gz####解压缩tcping-1.3.51-3cdtcping-1….

    2022年6月23日
    105
  • 子网划分,主机号,网络号计算

    子网划分,主机号,网络号计算这是在做网络题时总结的一些经验和见解,略显粗糙,主要是记一下常用的ABC3类地址和相关的子网号,主机号的计算ip地址     在主机或路由器中存放的IP地址(IPv4)都是32位的二进制代码。它包含了网络号(net-id)和主机号(host-id)两个独立的信息段。网络号用了标识主机或路由器所连接到的网络,主机号用来标识该主机或路由器。     为了提高可读性,每8位二进制数用一个…

    2022年6月24日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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