首頁 >後端開發 >PHP問題 >php怎麼除去陣列種的空值

php怎麼除去陣列種的空值

PHPz
PHPz原創
2023-05-11 10:49:37533瀏覽

在進行 PHP 開發時,常常需要對陣列進行處理,在處理陣列時,我們常常需要剔除陣列中的空值,讓陣列變得更加乾淨、整齊。

陣列中的空值不會影響陣列的使用,但它們會使陣列看起來很混亂,有時會對程式造成負擔。因此,我們要透過 PHP 的函數對數組進行處理,以除去其中的空值。

PHP 提供了多種方法來刪除陣列中的空值,其中最常用的方法是使用函數 array_filter()。下面我們來詳細介紹如何使用這個函數。

  1. 基礎使用

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]。

  1. 處理關聯數組

同時,我們也可以將關聯數組過濾。過濾函數是套用在值上,因此只有與過濾條件相符的鍵-值對才會被保留。

下面看一個範例:

<?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)。

  1. 使用自訂回呼函數

如果想要自訂篩選條件,可以使用回呼函數來實作。回調函數接收數組中單一元素的值作為參數,然後傳回一個布林值來指示該值是否應該保留。

下面看一個範例:

<?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]。

  1. 針對多維數組

前面介紹的方法都是適用於一維數組的,如果要針對多維數組進行過濾,應該如何操作呢?

我們可以使用一個遞歸函數來處理多維數組,如下所示:

<?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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn