php数组操作应统一用[]初始化、键名用字符串字面量、遍历前校验is_array且非空、修改优先用array_filter等原生函数,确保意图清晰、行为可预测、边界有防护。

PHP 数组操作看似简单,但写法不统一容易导致可读性差、隐性 Bug 多、后期维护成本高。规范的核心不是追求“最短”或“最炫”,而是让意图清晰、行为可预测、边界有防护。
键名优先用字符串字面量,避免裸数字或变量拼接
数组键名应明确表达语义,而非依赖顺序或运行时计算。尤其在关联数组中,直接写 'user_id' 比 $key = 'user' . '_id' 再用 $arr[$key] 更安全直观。
- ✅ 推荐:
$user['name']、$config['database']['host'] - ❌ 避免:
$user[0](除非是纯索引场景且上下文极明确)、$data[$prefix . '_status'](键名不可静态分析) - ⚠️ 注意:
isset($arr['field'])比!empty($arr['field'])更准确,因后者会把0、'0'、false等误判为“空”
初始化数组统一用 [],禁用 array()
PHP 5.4+ 已全面支持短数组语法,它更简洁、视觉干扰少,且与 JSON、JS 习惯一致,降低跨语言理解成本。
- ✅ 推荐:
$items = [];、$map = ['a' => 1, 'b' => 2]; - ❌ 不再使用:
$items = array();、$map = array('a' => 1, 'b' => 2); - ? 小技巧:多维数组换行缩进,提升可读性
$filters = ['status' => 'active','limit' => 20,'sort' => ['created_at' => 'DESC']];
遍历前先校验数组有效性,不假设输入一定合规
函数参数、API 返回、配置读取等来源的数组,必须检查是否为数组且非空,否则 foreach 或 array_keys() 可能报 Warning 或静默失败。
立即学习“PHP免费学习笔记(深入)”;
- ✅ 推荐:
if (is_array($data) && !empty($data)) { foreach ($data as $k => $v) { ... } } - ✅ 更严谨(含 null/bool 过滤):
if (is_array($data) && $data !== []) { ... } - ❌ 避免:
foreach ($data as $item) { ... }(未校验 $data 类型) - ? 函数入参可用类型声明:
function processItems(array $items): void,但注意这不拦截null(需额外判断)
修改数组时优先用原生函数,少用手动循环赋值
PHP 提供大量高效、语义明确的数组函数,比手写 for 或 foreach 更可靠、更易测试。
- ✅ 过滤:
$active = array_filter($users, fn($u) => $u['status'] === 'active'); - ✅ 映射:
$ids = array_column($users, 'id');(比array_map(fn($u) => $u['id'], $users)更直观) - ✅ 合并:
$all = array_merge($defaults, $overrides);(注意+不递归、不覆盖数字键) - ⚠️ 注意:
array_merge对数字键会重排索引,如需保留键名用+;但+不会合并同键的子数组,慎用于多维场景











