處理表單提交、API 回傳或資料匯入時,陣列常包含空字串、null 或 false 等「空值」,需在進入業務邏輯前過濾。本文示範三種常見寫法:array_filter、foreach、for 迴圈,並說明適用場景與差異。
$array = array("", '', '', '', '', 1, 1, 1, 1, 1);
// 或包含實際內容
$array = array("", '', '2', '', '', 1, 1, 1, 1, 1);
$tarray = array('', '11', '', 'www.bkjia.com', '', '', 'cn.net');
function clear($a) {
return $a !== ""; // 僅過濾空字串;若需過濾所有 falsy 值可用 return $a;
}
$array = array("", '', '', '', '', 1, 1, 1, 1, 1);
$stt = array_filter($array, "clear");
print_r($stt);
/* 輸出:
Array
(
[5] => 1
[6] => 1
[7] => 1
[8] => 1
[9] => 1
)
*/
特點:保留原鍵名、語意清晰、可複用回呼邏輯、PHP 內建優化效能佳。
$array = array("", '', '2', '', '', 1, 1, 1, 1, 1);
foreach($array as $k => $v) {
if($v === '') {
unset($array[$k]);
}
}
print_r($array);
/* 輸出:
Array
(
[2] => 2
[5] => 1
[6] => 1
[7] => 1
[8] => 1
[9] => 1
)
*/
特點:就地修改、保留非連續鍵名、需注意 foreach 複製陣列行為(PHP 7+ 為值傳遞,unset 影響原陣列)。
$tarray = array('', '11', '', 'www.bkjia.com', '', '', 'cn.net');
$len = count($tarray);
for($i = 0; $i < $len; $i++) {
if($tarray[$i] === '') {
unset($tarray[$i]);
}
}
print_r($tarray);
/* 輸出:
Array
(
[1] => 11
[3] => www.bkjia.com
[6] => cn.net
)
*/
特點:索引保持原位(非連續),若需重建連續索引需額外 array_values()。
// 利用 array_filter 預設行為(轉型為 false 的值皆被過濾)
$filtered = array_filter($array);
// 等同於 array_filter($array, function($v) { return (bool)$v; });
// 會移除:""、0、"0"、null、false、array()
| 方法 | 適用場景 | 效能 | 鍵名處理 |
|---|---|---|---|
| array_filter | 通用、可讀性優先、需複雜條件 | 最佳(C 層實作) | 保留原鍵 |
| foreach + unset | 就地修改、需額外邏輯處理 | 良好 | 保留原鍵 |
| for + unset | 需索引控制、舊版 PHP 相容 | 一般 | 保留原鍵 |
json_encode 會輸出物件而非陣列,需 array_values() 重建array_filter 會移除數值 0,若 0 為有效值需自訂回呼array_walk_recursive