您的位置:首页 >PHP过滤空值和false严格操作指南
发布于2026-02-19 阅读(0)
扫一扫,手机访问
array_filter() 默认用松散比较将0、"0"等判为false而过滤;需自定义回调函数,用===严格判断null、空字符串(含空白)、空数组,保留0和"0"等合法值。

array_filter() 默认行为为什么删不掉 0 和 "0"因为 array_filter() 默认用「松散比较」判断真假,0、"0"、""、null、false 全部被当作 false 过滤掉。但业务中常需保留 0(比如商品库存为 0)或字符串 "0"(比如状态码),这时候必须关掉默认逻辑。
传入自定义回调,显式检查是否为 null、空数组、空字符串(不含 "0")、或全空白字符,同时放过 0、false、0.0 等合法值:
$arr = [0, "0", "", "hello", null, false, [], ["a"], " "];
$result = array_filter($arr, function($v) {
if ($v === null) return false;
if (is_string($v) && trim($v) === '') return false;
if (is_array($v) && count($v) === 0) return false;
return true;
});
这样 0 和 "0" 会被保留,"" 和 " " 被剔除。
false 但剔除 null 和空字符串?注意类型判断顺序false === null 是 false,但松散比较 false == null 是 true,所以必须用 ===。常见错误是写成 !$v 或 empty($v) —— 它们都会把 false 当空处理。
empty($v) 判定 false、0、"0"、""、null、[] 全为真(即“空”),不能用于严格场景!$v 是松散取反,!0、!"0"、!null 全为 true,同样不可靠$v !== null && !is_string($v) && !is_array($v) || (is_string($v) && trim($v) !== '') || (is_array($v) && !empty($v)),但建议封装成函数复用trim() + is_string() 频繁判断如果数组元素超 10 万,且大量是整数或布尔值,每次调用 is_string() 和 trim() 会拖慢速度。可先用 gettype($v) 快速分流:
$result = array_filter($arr, function($v) {
$type = gettype($v);
if ($type === 'string') return trim($v) !== '';
if ($type === 'array') return !empty($v);
if ($type === 'NULL') return false;
return true; // 保留 int, double, bool, object 等
});
注意 gettype() 返回字符串如 "integer"、"boolean",不是常量;is_*() 函数内部有优化,但混合调用时仍建议按类型分路处理。
严格过滤的边界 case 很多,比如 "0.0"、"\0"、0.0 是否算空,得根据字段语义定——没有银弹,只有贴着业务逻辑写判断。
下一篇:萤石云与海康威视摄像头对比分析
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9