2010-02-07 97 views
292

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

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

回答

458

如果您只需要檢查是否有數組

if (empty($playerlist)) { 
    // list is empty. 
} 

中的任何元素。如果你需要檢查之前清理出空值(通常是爲了防止怪異的字符串):

foreach ($playerlist as $key => $value) { 
    if (empty($value)) { 
     unset($playerlist[$key]); 
    } 
} 
if (empty($playerlist)) { 
    //empty array 
} 
+1

你不應該用空嗎?計數對於大型陣列來說需要花費更長的時間。 –

+0

完成。我也改變了它,因爲你不必使用isset和東西。 –

+4

考慮到他的代碼示例,該變量將被設置,因此您不需要使用'empty()'。 – Cobby

3
empty($gamerow['players']) 
99

PHP中的空數組是虛僞的,因此您甚至不需要像其他人所建議的那樣使用empty()

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

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

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

+0

我希望這不會在一些標準改變......這將是痛苦的 –

57

一些像樣的答案,只是想我會當PHP確定數組是否爲空時,擴展一點以更清楚地解釋。


主注:

用鑰匙(或多個密鑰)的陣列將被確定爲NOT空由PHP。

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

因此,使用empty()檢查數組並不簡單告訴您是否有值,它會告訴您數組是否爲空,並且鍵是數組的一部分。


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

採取這些陣列例如:

/* 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]

陣3:
[0] => []
[1] => []

並與empty()返回以下結果測試上述陣列:

陣列中的一個:
$ ArrayOne不是空

陣列中的兩個:
$ ArrayTwo不是空

陣3:
$ ArrayThree不是空

陣列將永遠是空的,當你分配一個數組,但不使用它此後,如:

$ArrayFour = array(); 

這將是空的,即PHP將使用如果empty()以上時返回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如果找到一個值檢查之間的差異。

顯然基準將需要各種參數,對小型和大型陣列,並且當有值,而不是等

+1

非常感謝這一點。這是真的信息,並能夠使用'array_filter()來解決我的問題' –

+0

空(陣列())將始終evaludate爲FALSE,因此增加數(陣列())== 0將產生真正的 – mboullouz

+1

@mboullouz'計數( array())== 0'在有鍵和沒有值的情況下是錯誤的,所以這不僅僅用於檢查值。你的陳述是正確的,但是你用'count(array())'強制測試,因爲這個數組當然是空的。我們需要檢查數組何時從表單或其他地方返回以知道它是否爲空(鍵/值)或者是否具有值 – James

3

我使用此代碼

$variable = array(); 

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

但要注意的是,如果數組有大量的密鑰,與其他答案相比,這些代碼會花費很多時間對它們進行計數。

-6

以上解決方案對我無效。而是我用更可靠的方式(它可能有移動的開銷):

$countarr = count($newArr); // Count the elements in an array. 
$checkarr = "" ; //Initialize the value of variable to blank. 
for($x=0;$x<$countarr;$x++) 
{ 
    $checkarr = $newArr1[$x] ; 
    if($checkarr != "") 
    { 
     // do stuff if array is not empty. 
    } 
} 
+5

我發現無法解決現有答案的*無*工作。爲了使這個答案工作,count($ newArr)'必須大於0,這個答案(http://stackoverflow.com/a/2216060/369450)是在5年前發佈的。 – cpburnz

7

如果你想確定你正在測試變量是否真的明確地空數組,你可以使用這樣的事情:

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

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

    // do stuf if array is empty 
} 
2

您可以使用array_filters這適用於所有情況的偉大工程

$ray_state = array_filter($myarray); 

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

如何:

 
DepartmentPerSchool = array(); 
(empty(is_array($DepartmentPerSchool))) ? $DepartmentPerSchool //or echo is not empty : array('not set'=>'Not set. Contact Admin'); //or echo is empty 
0

爲什麼沒有人說這樣的回答:

$array = []; 

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

我認爲最好的辦法,以確定如果數組爲空或不爲使用COUNT()像這樣:

if(count($array)) { 
    return 'anything true goes here'; 
}else { 
    return 'anything false'; 
}