在進行 PHP 開發時,常常需要對陣列進行處理,在處理陣列時,我們常常需要剔除陣列中的空值,讓陣列變得更加乾淨、整齊。
陣列中的空值不會影響陣列的使用,但它們會使陣列看起來很混亂,有時會對程式造成負擔。因此,我們要透過 PHP 的函數對數組進行處理,以除去其中的空值。
PHP 提供了多種方法來刪除陣列中的空值,其中最常用的方法是使用函數 array_filter()。下面我們來詳細介紹如何使用這個函數。
array_filter() 函數是 PHP 中用來過濾陣列中不需要的值的函數。此函數的基本語法如下:
array array_filter (array $array [, callback $callback [, int $flag = 0 ]])
其中,$array 指要過濾的數組,$callback 是可選參數,表示要套用的回呼函數(如果不指定,將移除所有等值為false的元素)。 $flag 是還是一個可選參數,如果設定為 PHP_ARRAY_FILTER_USE_BOTH,將同時檢查值和鍵是否為空。
下面看一個範例:
<?php $arr = array("a", "b", "", "c", "", "d"); print_r(array_filter($arr)); ?>
輸出結果:
Array ( [0] => a [1] => b [3] => c [5] => d )
這裡的程式碼中,我們定義了一個陣列$arr,陣列中包含了兩個空元素“ ”,使用array_filter() 函數過濾掉空元素後,只保留了非空元素,即[a, b, c, d]。
同時,我們也可以將關聯數組過濾。過濾函數是套用在值上,因此只有與過濾條件相符的鍵-值對才會被保留。
下面看一個範例:
<?php $arr = array( "a" => 1, "b" => 2, "c" => "", "d" => 3, "e" => "", "f" => 4 ); print_r(array_filter($arr)); ?>
輸出結果:
Array ( [a] => 1 [b] => 2 [d] => 3 [f] => 4 )
這裡我們定義了一個關聯陣列$arr,我們可以看到,在過濾後,只剩下了值不為空的鍵(a、b、d、f)。
如果想要自訂篩選條件,可以使用回呼函數來實作。回調函數接收數組中單一元素的值作為參數,然後傳回一個布林值來指示該值是否應該保留。
下面看一個範例:
<?php $arr = array("apple", "banana", "cherry", "donut", "elderberry"); print_r(array_filter($arr, function($var) { return (strlen($var) > 4); })); ?>
輸出結果:
Array ( [2] => cherry [3] => donut [4] => elderberry )
這裡我們定義了一個回呼函數,該函數根據元素的長度判斷是否保留。過濾掉長度小於或等於4的元素,最終輸出結果為 [cherry, donut, elderberry]。
前面介紹的方法都是適用於一維數組的,如果要針對多維數組進行過濾,應該如何操作呢?
我們可以使用一個遞歸函數來處理多維數組,如下所示:
<?php $arr = array( 0 => 'some data', 1 => '', 2 => array( 0 => 'more data', 1 => '', 2 => array( 0 => 'even more data', 1 => '', ), ), ); function removeEmptyValues(&$array) { foreach($array as $key => &$value) { if(is_array($value)) { removeEmptyValues($value); if(count($value) == 0) { unset($array[$key]); } } else if(empty($value)) { unset($array[$key]); } } unset($value); } removeEmptyValues($arr); print_r($arr); ?>
#輸出結果:
Array ( [0] => some data [2] => Array ( [0] => more data [2] => Array ( [0] => even more data ) ) )
這裡,我們定義了一個遞歸函數removeEmptyValues() 來遍歷多維數組,將裡面的元素處理,會自動剔除空值。
總結
陣列在PHP 開發中十分常見,但有時陣列中可能會包含大量空值,佔據大量的儲存空間,影響程式的效能,此時我們可以使用array_filter( ) 函數來移除陣列中的空值,讓陣列更整潔、更有效率。需要注意的是,在處理多維數組時,我們需要使用遞歸函數來處理。
當然,這只是一個簡單的解決方案,同時也不適用於所有情況。如果你有更好的方法,歡迎分享。
以上是php怎麼除去陣列種的空值的詳細內容。更多資訊請關注PHP中文網其他相關文章!