IE盒子

搜索
查看: 103|回复: 0

PHP三种数组合并方式

[复制链接]

3

主题

10

帖子

21

积分

新手上路

Rank: 1

积分
21
发表于 2023-3-25 21:09:55 | 显示全部楼层 |阅读模式
一、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));

?>运行结果:

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表