|
一、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 => &#34;first&#34;,
222 => &#34;first&#34;,
&#34;first&#34; //会指定默认的数字键223
];
$arrSecond = [
111 => &#34;second&#34;,
333 => &#34;second&#34;,
&#34;second&#34; //会指定默认的数字键334
];
//对于重复的数字键,+操作后,前面数组的键值会覆盖后面的,保留之前数字键
var_dump(&#34;array + result:&#34;, $arrFirst + $arrSecond);
//对于重复的数字键,array_merge后,重排数字键(字符串键不变),不会覆盖
var_dump(&#34;array_merge result:&#34;, array_merge($arrFirst, $arrSecond));
//对于重复的数字键,array_merge_recursive后,重排数字键(字符串键不变),不会覆盖
var_dump(&#34;array_merge_recursive result:&#34;, array_merge_recursive($arrFirst, $arrSecond));
?>
运行结果:

(二)、相同字符串键
<?php
$arrFirst = [
&#34;first_key&#34; => 1,
&#34;second_key&#34; => 1,
&#34;third_key&#34; => 1,
];
$arrSecond = [
&#34;first_key&#34; => 2,
&#34;second_key&#34; => 2,
&#34;fourth_key&#34; => 2,
];
//对于重复的字符串键,+操作后,前面数组的键值会覆盖后面的
var_dump(&#34;array + result:&#34;, $arrFirst + $arrSecond);
//对于重复的字符串键,array_merge后,后面数组的键值会覆盖前面的
var_dump(&#34;array_merge result:&#34;, array_merge($arrFirst, $arrSecond));
//对于重复的字符串键,array_merge_recursive后,相同键名的键值会被合并到同一数组中(会递归)
var_dump(&#34;array_merge_recursive result:&#34;, array_merge_recursive($arrFirst, $arrSecond));
?>运行结果:
 |
|