数组操作需兼顾可读性、健壮性和可维护性,核心是意图清晰、行为可预测、边界有防护;推荐短数组语法、语义化键名、用array_key_exists判键、校验输入类型、优先使用原生函数处理。

数组操作不是“写出来就行”,而是要兼顾可读性、健壮性和长期可维护性。核心原则就三条:意图清晰、行为可预测、边界有防护。
初始化统一用 [],别再写 array()
PHP 5.4+ 全面支持短数组语法,它更轻量、更直观,也和 JSON、JS 的习惯对齐。
- ✅ 推荐写法:
$users = [];、$config = ['host' => '127.0.0.1', 'port' => 3306]; - ❌ 避免写法:
$users = array();、$config = array('host' => '127.0.0.1'); - 多维数组建议换行缩进,比如:
$filters = [<br> 'status' => 'active',<br> 'limit' => 20,<br> 'sort' => ['created_at' => 'DESC']<br>];
键名用语义化字符串,别拼接、别裸数字
键名是代码的“说明书”,应直接表达含义,而不是靠运行时推导或顺序猜测。
- ✅ 清晰安全:
$user['name']、$settings['cache']['ttl'] - ❌ 易出错:
$data[0](除非是纯索引且上下文极度明确)、$data[$prefix . '_timeout'](键名无法静态分析) - 判断键是否存在,优先用
array_key_exists('field', $arr);isset($arr['field'])在值为null时会误判
遍历前必须校验,不假设输入一定合规
函数参数、API 返回、配置文件读取来的数组,类型和内容都不可信——这是 Bug 的高发区。
- ✅ 基础防护:
if (is_array($data) && !empty($data)) { ... } - ✅ 更严谨(排除
null、false等):if (is_array($data) && $data !== []) { ... } - ✅ 类型声明辅助:
function process(array $items): void,但注意它不拦截null,仍需额外判断 - ❌ 危险写法:
foreach ($data as $item) { ... }(一旦 $data 是 string 或 null,直接报 Warning)
修改优先用原生函数,少动手写循环
PHP 内置函数经过充分测试、性能优化,语义明确,比手写 foreach 更可靠、更易重构。
- 过滤用
array_filter():$actives = array_filter($users, fn($u) => $u['status'] === 'active'); - 取列用
array_column():$ids = array_column($users, 'id');(比array_map()更直白) - 合并用
array_merge():$final = array_merge($defaults, $overrides);(注意+不递归、不覆盖数字键) - 大数组慎用
array_map/array_filter全量加载,考虑array_chunk()分批,或用生成器逐条处理
不复杂但容易忽略——把这几条写进日常习惯,数组相关的隐性 Bug 和维护成本会明显下降。











