判断变量是否为null需用=== null或is_null(),因''、0、false等均不等于null;trim()仅处理字符串两端空白且对null报错;array_filter()默认过滤所有falsy值,去null或空白需自定义回调。

去空值(null)和去空白(whitespace)根本不是一回事:前者是处理变量是否存在,后者是处理字符串内容里有没有空格、换行等字符。
怎么判断一个变量是不是 null,而不是空字符串?
PHP 里 null 表示“未定义”或“被显式设为 null”,而 ''(空字符串)、0、false 都不是 null。用 === null 或 is_null() 才能准确判断:
-
null的典型来源:$a = null;、unset($a);后读取、数据库字段为 NULL 时 fetch 出来 -
empty($a)或!$a会把''、0、false、[]全当成“空”,误伤真实可用值 - 数据库场景下,PDO 默认把 SQL 的
NULL映射为 PHP 的null,不是''—— 这点容易在表单回填或 API 返回时出错
trim() 只动字符串两端,且只处理空白字符
trim() 不会把 null 变成 '',也不会影响中间的空格。它只对字符串类型生效,传入 null 会触发 warning 并返回 ''(PHP 8.1+ 改为抛 TypeError):
- 默认清理的字符包括:空格、
\t、\n、\r、\0、\x0B - 想同时清中间空格?得用
preg_replace('/\s+/', ' ', $str)再trim() - 中文全角空格(
)不属于\s,trim()不处理,得手动加进第二个参数:trim($str, " \t\n\r\0\x0B\u{3000}")(需启用 PCRE UTF-8)
批量处理数组时,array_filter() 默认行为很危险
直接写 array_filter($arr) 会把 0、false、''、null 全干掉,不是“去空值”,而是“去所有 falsy 值”:
立即学习“PHP免费学习笔记(深入)”;
- 只去
null:用array_filter($arr, function($v) { return $v !== null; }) - 只去空白字符串(保留
0和false):array_filter($arr, function($v) { return !is_string($v) || trim($v) !== ''; }) - 数据库查询结果含
null字段时,别依赖array_filter()清洗,先明确业务意图:这个字段允许为空?前端是否需要显示 “-”?
真正麻烦的从来不是函数怎么写,而是分不清 null 是数据库没填,还是接口故意传了空字符串,还是前端 JS 把 undefined 错发成了 null —— 这些地方不加日志或类型断言,后面排查起来全是迷雾。











