PHP三种数组合并方式

PHP三种数组合并方式

  • 一、PHP数组基础
  • 二、三种数组合并方式
    • 相同数字键名
    • 相同字符串键

一、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

  1. 可以为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();
它们的区别主要体现在对于相关键名(数字键名、字符串键名)的处理方式,下面以两个实际例子来提现:

相同数字键名



$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三种数组合并方式_第1张图片

相同字符串键



$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));

?>

运行结果:
PHP三种数组合并方式_第2张图片

你可能感兴趣的:(PHP三种数组合并方式)