首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 刪除陣列空值的高效方法:array_filter 詳解

     編輯:PHP 相關知識

常見誤區:foreach 迴圈刪除

許多開發者習慣寫:

<?php
foreach ($arr as $k => $v) {
    if (!$v) unset($arr[$k]);
}
?>

這樣做有兩個缺點:

  1. foreach 操作的是陣列副本,大陣列記憶體開銷大。
  2. 需額外判斷 0、'0'、false、null、'' 等「空值」定義。

正解:array_filter() 內建函式

array_filter() 可用回呼函式過濾,**若省略回呼,預設移除所有轉換為 false 的值**(即 0, '0', false, null, '', array())。

基本用法

<?php
$entry = array(
    0 => 'foo',
    1 => false,
    2 => -1,
    3 => null,
    4 => ''
);
print_r(array_filter($entry));

輸出:

Array
(
    [0] => foo
    [2] => -1
)

注意:-1 為真值被保留,鍵名 0、2 保持不變。

進階:保留 0 與 '0' 的自訂回呼

<?php
$arr = ['a', 0, '0', '', null, false, 'text'];
$result = array_filter($arr, function($v) {
    return $v !== '' && $v !== null && $v !== false; // 保留 0 和 '0'
});
print_r($result);

實用組合技:去重 + 去空 + 重新索引

<?php
$strDelCodes = "A;B;;C;;C;D;;;D;D";
$rsArray = array_values(
    array_unique(
        array_diff(explode(';', $strDelCodes), array(''))
    )
);
// 結果:Array ( [0] => A [1] => B [2] => C [3] => D )

函式鏈說明:

  • explode 分割字串
  • array_diff(..., ['']) 移除空字串
  • array_unique 去重(保留第一次出現)
  • array_values 重置數字索引

相關陣列函式速查

函式用途
array_slice陣列切片(相當於 LIMIT)
array_splice移除/替換陣列片段
array_merge合併陣列(數字鍵重新索引,字串鍵後覆蓋前)
array_diff差集(僅比較值)
array_intersect交集

總結

善用 array_filter() 預設行為或自訂回呼,配合 array_values() 重建索引,即可以最簡潔、效能最佳的方式處理陣列空值。請多閱讀官方手冊,發掘更多內建函式威力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved