需先确认PHP版本≥7.3.0,否则新增数组函数将报错或失效;代码开头应加version_compare(PHP_VERSION, '7.3.0', '

要系统掌握PHP 7.3新增及强化的数组函数特性,需聚焦真实开发中高频、易错、不可替代的核心功能,跳过文档式罗列,直接锚定操作路径与边界条件。
先确认运行环境是否支持
打开终端或命令行,执行 php -v。若输出版本号低于 7.3.0,后续所有函数和语法将报错或静默失效。
在代码开头加一行判断: if (version_compare(PHP_VERSION, '7.3.0', '。这步不能省,否则 array_key_first() 或参数展开会直接 fatal error。
记 array_key_first():取第一个键名的唯一正解
方法一:直接调用获取键名
立即学习“PHP免费学习笔记(深入)”;
$arr = ['name' => 'Alice', 'age' => 28, 'city' => 'Beijing']; echo array_key_first($arr); // 输出 name
方法二:配合空值判断识别空数组
if (array_key_first($arr) === null) { /* 空数组逻辑 */ }。注意必须用 === null,用 == 会把键名为 false/0 的非空数组误判为空。
方法三:替代旧写法 reset() + key()
以前要写两行:reset($arr); $firstKey = key($arr);。现在一行搞定,且不改变数组内部指针位置——这是 reset() 无法避免的副作用。
记参数展开(...):只对索引数组生效
第一步:确认数组是纯数字索引且连续
用 array_is_list($arr) 检查。如果不是 list(比如键是 ['a'=>1,'b'=>2] 或 [0=>1,2=>3]),展开时会抛出 Fatal error: Uncaught Error: Cannot unpack array with string keys。
第二步:函数调用时把 ... 放在参数末尾
function sum($a, $b, $c) { return $a + $b + $c; } $nums = [10, 20, 30]; echo sum(...$nums); // 正确
第三步:可混用固定参数与展开参数,但 ... 必须在最后
sum(5, ...[10, 15]); // 等效于 sum(5, 10, 15),合法;sum(...[5, 10], 15) 会报错。
记空合并赋值 ??=:安全初始化数组字段
传统写法:if (!isset($config['timeout'])) { $config['timeout'] = 30; } —— 冗长且易漏 isset。
PHP 7.3 写法:$config['timeout'] ??= 30;。这行代码只在 $config['timeout'] 为 null 或未定义 时赋值,已存在 false/0/'' 不触发。
注意:??= 不能用于表达式左侧含函数调用的位置,例如 getOptions()['host'] ??= 'localhost' 会报错,必须先赋给变量再操作。
记数组展开(...)在字面量中的用法
合并两个索引数组:
$a = [1, 2]; $b = [3, 4]; $c = [...$a, ...$b]; // [1, 2, 3, 4]
往数组开头插入元素:
$prepend = [0]; $full = [...$prepend, ...$a]; // [0, 1, 2]
⚠️ 关联数组(含字符串键)在这里直接报错,不要尝试绕过:[...'name' => 'A'] 语法非法,PHP 解析器拒绝执行。



















