php数组考点核心是索引与关联数组键类型差异、array_merge()与+合并逻辑不同、in_array()需严格模式防类型转换误判、foreach引用后须unset避免变量污染。

PHP 数组是面试高频考点,核心在于理解索引数组、关联数组、多维数组的定义方式、常用函数行为差异,以及容易踩坑的类型比较和引用机制。
索引数组 vs 关联数组:键名本质区别
索引数组的“数字键”其实是字符串键的特例——PHP 会自动将纯数字字符串(如 "123")转换为整型键;而关联数组的键必须显式指定为字符串(如 "name")或非零/负整数。关键点在于:键的类型决定数组分类,而非是否手动写键名。
例如:
$A = [1, 2, 3]; // 索引数组,键为 int(0), int(1), int(2)$B = ["0" => 1, "1" => 2]; // 仍是索引数组,PHP 自动转键为 int
$C = ["a" => 1, "b" => 2]; // 关联数组,键为 string
$D = [0 => 1, "0" => 2]; // 实际只保留一个元素:["0" => 2],因键 0 和 "0" 被视为相同
array_merge() 与 + 运算符:合并逻辑完全不同
array_merge() 对索引数组重排键(从 0 开始连续整数),对关联数组后出现的同名键覆盖前值;+ 运算符则是“左侧优先”,仅对右侧数组中左侧不存在的键进行追加,不重排索引、不覆盖已有键。
立即学习“PHP免费学习笔记(深入)”;
JTBC CMS(5.0) 是一款基于PHP和MySQL的内容管理系统原生全栈开发框架,开源协议为AGPLv3,没有任何附加条款。系统可以通过命令行一键安装,源码方面不基于任何第三方框架,不使用任何脚手架,仅依赖一些常见的第三方类库如图表组件等,您只需要了解最基本的前端知识就能很敏捷的进行二次开发,同时我们对于常见的前端功能做了Web Component方式的封装,即便是您仅了解HTML/CSS也
常见误判场景:
- 两个索引数组用 +:结果保留左侧键名,可能产生非连续数字键(如 [0=>1] + [0=>9, 1=>8] → [0=>1, 1=>8])
- 含字符串键时,array_merge() 不重排,但同名键会被覆盖;+ 则完全忽略右侧已存在的键
in_array() 的第三个参数:类型安全常被忽略
默认情况下 in_array() 使用松散比较(==),会导致类型转换引发误判。例如:
in_array("1", [0, 1, 2]) → true(因为 "1" == 1)in_array("1", [0, 1, 2], true) → false(严格比较 "1" === 1 为 false)
面试中若涉及用户输入校验、配置项匹配等场景,必须强调开启严格模式(true)以避免隐式转换漏洞。
foreach 循环中的引用陷阱
使用 &$value 引用赋值后,若未 unset($value),该引用会持续存在,影响后续循环或变量复用:
$arr = [1, 2, 3];foreach ($arr as &$v) { $v *= 2; }
// 此时 $v 仍指向 $arr[2],若后续写 $v = 5,$arr[2] 也会变成 5
unset($v); // 必须加这句,否则隐患潜伏
更安全的做法是:循环结束后立即销毁引用变量,或改用键值方式修改($arr[$k] = ...)。









