array_filter() 官方文檔明確指出:若不提供回調函數,將移除所有轉換為 `false` 的元素。這特性可一鍵清理「空值」陣列,但需精確理解 PHP 的假值定義。
'藍色夏威夷的博客', // 非空字符串 → true
1 => false, // 布爾假 → false ✓
2 => 1, // 非零整數 → true
3 => null, // null → false ✓
4 => '', // 空字符串 → false ✓
5 => 'https://www.jb51.net', // 非空字符串 → true
6 => '0', // 字符串 "0" → false ✓ (關鍵陷阱!)
7 => [], // 空數組 → false ✓
8 => 0, // 整數 0 → false ✓
];
$valid = array_filter($entry);
print_r($valid);
Array
(
[0] => 藍色夏威夷的博客
[2] => 1
[5] => https://www.jb51.net
)
| 值 | 類型 | 轉換結果 | 說明 |
|---|---|---|---|
false | bool | false | 顯式假值 |
0 | int | false | 零值 |
'0' | string | false | 字符串 "0" 視為假(易忽略) |
'' | string | false | 空字符串 |
null | null | false | 無值 |
[] | array | false | 空數組 |
0.0 | float | false | 浮點零 |
// 僅移除 null、false、空字符串、空數組
$filtered = array_filter($entry, function ($v) {
return $v !== null && $v !== false && $v !== '' && $v !== [];
});
// 保留:'0', 0, 0.0, 'text', 1, [...]
function deepFilter(array $arr): array {
$arr = array_filter($arr, function ($v) {
if (is_array($v)) {
$v = deepFilter($v);
return !empty($v); // 遞歸後非空才保留
}
return $v !== null && $v !== false && $v !== '';
});
return $arr;
}
array_filter 保留原鍵名,若需重建索引:
$filtered = array_values(array_filter($entry)); // 索引重排 0,1,2...
善用 array_filter 無回調特性可快速清理髒數據,但務必確認業務對「假值」的定義與 PHP 一致,否則請顯式編寫回調函數。