资讯专栏INFORMATION COLUMN

PHP三种数组合并方式区别示例

impig33 / 365人阅读

摘要:一写在前面目前工作中接触到的数组合并方式主要有三种操作符它们的区别主要体现在对于相同键名数字键名字符串键名的处理方式,下面本文将以两个实际例子来体现二相同字符串键对于重复的字符串键,后,后面数组的键值会覆盖前面的对于重复的字符串键,操作后,

一、写在前面

目前工作中接触到的PHP数组合并方式主要有三种:
1、+操作符
2、array_merge()
3、array_merge_recursive()

它们的区别主要体现在对于相同键名(数字键名、字符串键名)的处理方式,下面本文将以两个实际例子来体现~

二、相同字符串键
 1,
    "second_key" => 1,
    "third_key"  => 1,
];

$arrSecond = [
    "first_key"  => 2,
    "second_key" => 2,
    "fourth_key" => 2,
];

//对于重复的字符串键,array_merge后,后面数组的键值会覆盖前面的
echo sprintf("
array_merge result:
%s", print_r(array_merge($arrFirst, $arrSecond), true));

//对于重复的字符串键,+操作后,前面数组的键值会覆盖后面的
echo sprintf("
array + result:
%s", print_r($arrFirst + $arrSecond, true));

//对于重复的字符串键,array_merge_recursive后,相同键名的键值会被合并到同一数组中(会递归)
echo sprintf("
array_merge_recursive result:
%s", print_r(array_merge_recursive($arrFirst, $arrSecond), true));

运行结果:

三、相同数字键
 "first",
    222 => "first",
    "first" //会指定默认的数字键223
];

$arrSecond = [
    111 => "second",
    333 => "second",
    "second" //会指定默认的数字键334
];

//对于重复的数字键,+操作后,前面数组的键值会覆盖后面的,保留之前数字键
echo sprintf("
array + result:
%s", print_r($arrFirst + $arrSecond, true));

//对于重复的数字键,array_merge后,重排数字键,不会覆盖
echo sprintf("
array_merge result:
%s", print_r(array_merge($arrFirst, $arrSecond), true));

//对于重复的数字键,array_merge_recursive后,重排数字键,不会覆盖
echo sprintf("
array_merge_recursive result:
%s", print_r(array_merge_recursive($arrFirst, $arrSecond), true));

运行结果:

四、附:PHP数组基础概述
一、KEY
1、Key只能为Integer或String,可同时存在
2、包含合法整型值的字符串Key会被转化为整型存储,如:"6"的Key会被转化为6存储
3、布尔值Key会被转化为整型存储,true会被转化为1存储,false会被转化为0存储
4、Null会被转化为空串存储
5、如果多个Key值被转化后为相同的值,则只使用最后一个,前面的被覆盖,如:一个数组中依次定义了"1"、true、1的key,则最后只会存储key为1的value,之前的值都被覆盖
6、如果未指定Key,则会被自动设定为之前用过的最大的整型Key+1,最小为0

二、VALUE
1、可以为PHP任意类型(字符串、整形、浮点型、布尔型、对象、数组、NULL、资源类型)

三、其他类型转化为数组类型
1、Integer、String、Float、Boolean、Resource类型转化为数组类型时,会被自动分配Key为0,Value为其原值
2、Object类型转化为数组类型时,成员变量名会作为数组Key,私有属性的Key会加上类名前缀,保护属性的Key会加上"*"前缀
3、Null会被转化为空数组

四、foreach
1、两种形式,foreach($arr as $key => $value)与foreach($arr as
$value),其中$value是值传递,使用&$value是引用传递
2、遍历依赖数组内部指针
3、遍历结束后,$value会被保留,为防止在多次foreach时出现问题,可以在一次foreach后unset($value)或使用不同的变量

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30775.html

相关文章

  • 【响应式编程的思维艺术】 (2)响应式Vs面向对象

    摘要:本文是响应式编程第一章响应式这篇文章的学习笔记。通过代码对比可以发现,在响应式编程中,我们不再用对象的概念来对现实世界进行建模,而是使用流的思想对信息进行拆分和聚合。 本文是Rxjs 响应式编程-第一章:响应式这篇文章的学习笔记。示例代码地址:【示例代码】 更多文章:【《大史住在大前端》博文集目录】 showImg(https://segmentfault.com/img/bVbuE...

    Tonny 评论0 收藏0
  • HTML之body标签中的相关标签补充

    摘要:一列表标签列表标签分为三种。二表格标签表格标签用表示。单元格和单元格之间的距离外边距,像素为单位。例如表示当前单元格在水平方向上要占据两个单元格的位置。输入标签文本框输入标签文本框用于接收用户输入。一 列表标签   列表标签分为三种。   1、无序列表,无序列表中的每一项是     英文单词解释如下:       a.ul:unordered list,无序列表的意思。       b.l...

    felix0913 评论0 收藏0
  • JavaScript数方法之数合并

    摘要:可以看到,方法,简洁高效,且能实现多个数组合并并且能够实现深度嵌套注意最后还是使用了哦,换成是不可以的。多个数组合并原生的方法可以简单实现多个数组合并,比如会返回至于其他方法,应该只是一个接口的问题,可以像下面这样实现。 网易前端面试的时候,面试官问我有几种数组合并的方法,当时第一反应就是concat,但是面试官说几种,我寻思着原生js方法好像也只有concat呀,就说不改变原数组的话...

    izhuhaodev 评论0 收藏0
  • IBM Bluemix开启云开发时代

    摘要:运行时环境,又叫构建包上提供的一系列运行时环境包括图中显示的七种命名构建包,外加已批准用于的其他任何构建包。开发运营服务上的八种开发运营服务包括来自的五种服务和来自第三方的三种服务。 去年夏天我测评了Cloud Foundry PaaS(平台即服务),当时着眼于Pivotal和ActiveState这两种解决开源方案。这回测试时,我将关注IBM Bluemix,这是在SoftLayer上托管...

    cocopeak 评论0 收藏0
  • PHP面试常考内容之Memcache和Redis(1)

    摘要:以下正文的部分内容来自程序员面试笔试宝典书籍,如果转载请保留出处一什么是是一个开源免费高性能的分布式对象缓存系统,它基于一个存储键值对的来存储数据到内存中。预告面试常考内容之和将于本周三更新。 你好,是我琉忆。继上周(2019.2-11至2-15)发布的PHP面试常考内容之面向对象专题后,发布的第二个专题,感谢你的阅读。本周(2019.2-18至2-22)的文章内容点为以下几点,更新时...

    wenyiweb 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<