
PHP 数组函数是业务数据过滤中高效、简洁的利器,关键在于选对函数、组合使用、避免副作用。
用 array_filter() 做条件筛选
这是最常用的过滤函数,适合按规则剔除不满足条件的元素。它默认保留返回 true 的项,支持回调函数或内置常量(如 ARRAY_FILTER_USE_BOTH 可同时访问键和值)。
- 过滤非空且长度大于2的用户名:
array_filter($users, fn($name) => is_string($name) && strlen($name) > 2) - 保留订单金额大于0的记录:
array_filter($orders, fn($order) => $order['amount'] > 0) - 注意:默认会重置键名,如需保留原键,加第三个参数 ARRAY_FILTER_USE_KEY 或手动用 array_values() 重索引
用 array_map() 统一清洗字段
适合对每个元素做标准化处理,比如去空格、转小写、脱敏、类型转换,为后续过滤打基础。
基于Intranet/Internet 的Web下的办公自动化系统,采用了当今最先进的PHP技术,是综合大量用户的需求,经过充分的用户论证的基础上开发出来的,独特的即时信息、短信、电子邮件系统、完善的工作流、数据库安全备份等功能使得信息在企业内部传递效率极大提高,信息传递过程中耗费降到最低。办公人员得以从繁杂的日常办公事务处理中解放出来,参与更多的富于思考性和创造性的工作。系统力求突出体系结构简明
- 统一清理用户邮箱并转小写:
array_map('trim', array_map('strtolower', $emails)) - 将字符串金额转为 float 并过滤非法值:
array_filter(array_map(fn($v) => is_numeric($v) ? (float)$v : null, $amounts)) - 慎用:若映射后产生 null/false,需配合 array_filter() 二次清理
用 array_intersect_key() 和 array_diff_key() 控制字段白/黑名单
在 API 入参校验、数据库写入前字段裁剪时非常实用,不依赖值内容,只看键名是否在允许/禁止列表中。
立即学习“PHP免费学习笔记(深入)”;
- 只保留允许入库的字段:
array_intersect_key($input, array_flip(['name', 'email', 'status'])) - 剔除敏感字段(如 password、token):
array_diff_key($user, ['password' => '', 'token' => '']) - 比 foreach + unset 更安全,不会因键不存在报 notice,也避免遗漏嵌套结构
组合使用提升健壮性:过滤 + 验证 + 默认值
真实业务中很少单用一个函数。常见模式是先清洗、再过滤、最后补缺,形成“管道式”处理流。
- 示例:处理分页参数:
$page = (int)array_filter([$input['page'] ?? 1], 'is_numeric')[0] ?? 1; - 更清晰写法:用 array_replace() 补默认值 → array_map() 类型转换 → array_filter() 排除非预期值
- 重要提醒:所有来自用户的数组($_GET、$_POST、JSON 解析结果)都应视为不可信,过滤不是可选项,而是必经步骤










