isset用法 - 如何使用PHP檢查數組是否為空?




php isset用法 (11)

count($gamerow['players'])將為0。

players可以是空的或逗號分隔的列表(或單個值)。 檢查是否空的最簡單方法是什麼? 我假設一旦我將$gameresult數組放入$gamerow我就可以這麼做了? 在這種情況下,如果跳過$playerlist如果它是空的,可能會更高效,但為了爭論起見,如何檢查數組是否為空?

$gamerow = mysql_fetch_array($gameresult);
$playerlist = explode(",", $gamerow['players']);

一些體面的答案,但只是想當PHP確定一個數組是否為空時,我會擴大一點來更清楚地解釋。

主要說明:

具有一個鍵(或多個鍵)的數組將被PHP確定為不空

由於數組值需要存在鍵,只有在沒有鍵(AND因此沒有值)的情況下,數組中是否有值才能確定它是否為空。

因此用empty()檢查一個數組並不是簡單地告訴你是否有值,它告訴你數組是否為空,鍵是數組的一部分。

因此,在決定使用哪種檢查方法之前,請考慮如何生成數組。
EG當每個表單字段有一個數組名(例如name="array[]" )時,用戶提交HTML表單時數組具有鍵。
將為每個字段生成一個非空數組,因為每個表單字段的數組都會自動遞增鍵值。

以這些數組為例:

/* Assigning some arrays */

// Array with user defined key and value
$ArrayOne = array("UserKeyA" => "UserValueA", "UserKeyB" => "UserValueB");

// Array with auto increment key and user defined value
// as a form field would return with user input
$ArrayTwo[] = "UserValue01";
$ArrayTwo[] = "UserValue02";

// Array with auto incremented key and no value
// as a form field would return without user input
$ArrayThree[] = '';
$ArrayThree[] = '';

如果您回顯上述數組的數組鍵和值,則會得到以下結果:

陣容一:
[UserKeyA] => [UserValueA]
[UserKeyB] => [UserValueB]

陣列二:
[0] => [UserValue01]
[1] => [UserValue02]

陣列三:
[0] => []
[1] => []

empty()測試上面的數組返回如下結果:

陣容一:
$ ArrayOne不是空的

陣列二:
$ ArrayTwo不是空的

陣列三:
$ ArrayThree不是空的

分配數組時,數組總是空的,但之後不使用它,例如:

$ArrayFour = array();

這將是空的,即當使用上面的empty()時,PHP將返回TRUE。

因此,如果你的數組有鍵 - 無論是通過例如表單的輸入名稱,或者如果你手動分配它們(即創建一個數據庫列名作為鍵的數組,但沒有來自數據庫的值/數據),那麼該數組不會是empty()

在這種情況下,你可以在foreach循環數組,測試每個鍵是否有值。 無論如何,如果您需要遍歷數組,那麼這是一個好方法,可能會檢查密鑰或清理數據。

但是,如果您只需要知道“存在值”是否返回TRUEFALSE ,則它不是最好的方法。 有多種方法可以確定數組是否具有任何值,當它知道它有密鑰時。 函數或類可能是最好的方法,但是一如既往,它取決於您的環境和確切的需求,以及其他事情,比如您當前對數組(如果有的話)執行的操作。

這是一種使用非常少的代碼來檢查數組是否具有值的方法:

使用array_filter()
迭代數組中的每個值,將它們傳遞給回調函數。 如果回調函數返回true,則數組中的當前值將返回到結果數組中。 數組鍵被保留。

$EmptyTestArray = array_filter($ArrayOne);

if (!empty($EmptyTestArray))
  {
    // do some tests on the values in $ArrayOne
  }
else
  {
    // Likely not to need an else, 
    // but could return message to user "you entered nothing" etc etc
  }

在所有三個示例數組上運行array_filter() (在此答案的第一個代碼塊中創建)將導致以下結果:

陣容一:
$ arrayone不是空的

陣列二:
$ arraytwo不是空的

陣列三:
$ arraythree是空的

因此,當沒有值時,是否有鍵,使用array_filter()創建一個新數組,然後檢查新數組是否為空,以顯示原始數組中是否存在任何值。
這並不理想,有點麻煩,但是如果你有一個巨大的數組,並且不需要為了任何其他原因而循環它,那麼就代碼而言這是最簡單的。

我沒有經驗檢查開銷,但最好知道使用array_filter()foreach檢查是否找到值之間的差異。

很顯然,基準測試需要各種參數,小型和大型陣列以及何時有值而不是等。


你可以使用array_filters,它適用於所有情況

$ray_state = array_filter($myarray);

if (empty($ray_state)) {
 echo 'array is empty';
}else{
echo 'array is not empty';
}

在PHP中,一個空數組是偽造的,所以你甚至不需要像其他人所建議的那樣使用empty()

<?php
$playerList = array();
if (!$playerList) {
    echo "No players";
} else {
    echo "Explode stuff...";
}
// Output is: No players

PHP的empty()確定變量是否不存在或者俱有falsey值(如array()0nullfalse等)。

在大多數情況下,您只需要檢查!$emptyVar 。 如果變量可能沒有設置,則使用empty($emptyVar) ,並且您不會觸發E_NOTICE ; 海事組織這通常是一個壞主意。


如果你想確定你正在測試的變量是否實際上顯式為一個空數組,你可以使用類似這樣的東西:

if ($variableToTest === array()) {
    echo 'this is explicitly an empty array!';
}


我使用這個代碼

$variable = array();

if( count( $variable ) == 0 )
{
    echo "Array is Empty";
}
else
{
    echo "Array is not Empty";
}

但請注意,如果數組中有大量的鍵,則與其他答案相比,此代碼將花費很多時間對它們進行計數。


我用下面的代碼解決了這個問題。

$catArray=array();                          

$catIds=explode(',',$member['cat_id']);
if(!empty($catIds[0])){
foreach($catIds as $cat_id){
$catDetail=$this->Front_Category->get_category_detail($cat_id);
$catArray[]=$catDetail['allData']['cat_title'];
}
echo implode(',',$catArray);
}

為什麼沒有人說這個答案:

$array = [];

if($array == []) {
    // array is empty
}

 $gamerow = mysql_fetch_array($gameresult);

if (!empty(($gamerow['players'])) {
   $playerlist = explode(",", $gamerow['players']);
}else{

  // do stuf if array is empty
}

is_array($detect) && empty($detect);

is_array





arrays