2011-09-23 33 views
1

簡短的問題。數組大小> 0,雖然沒有設置密鑰

給出以下示例:

$arr = array(); 
$arr[0] = false ?: NULL; 
var_dump($arr[0]); 
var_dump($arr[1]); 
var_dump(isset($arr[0])); 
var_dump(isset($arr[1])); 
var_dump(count($arr)); 

所得到的輸出是:

NULL 
NULL 
bool(false) 
bool(false) 
int(1) 

爲何所得的陣列的尺寸爲1而不是0和有任何方法來防止這種使用三元運算符時會發生什麼?這是一個錯誤還是有意的行爲?

btw,我正在運行php 5.3.3-7,但目前無法在其他版本上測試它。

回答

2

isset()如果變量未設置,則返回false,或變量等於NULL。在這種情況下,$arr[0]明確設置爲NULL。這在語義上與實際上不同unset():變量仍然設置,它只是設置爲一個空值。

總之:按預期工作。這是不同功能做一些不同的事情的不幸的副作用。

作爲旁註,在此陣列上使用foreach實際上也會返回0 => NULL鍵/值對,正如您可能期望從count()返回的值那樣。

+0

感謝您的快速響應。所以,在使用三元運算符時是否有任何方法可以避免這種情況,或者在這種情況下是否需要使用long if(){}語句? –

+0

@FlorianKernler:如果你想實際取消它,那麼你需要調用'unset()'。這是因爲將數組的元素設置爲NULL是一個有效的選擇並且經常使用。 –

+0

實際上,我在使用三元運算符時正在尋找更像「不要設置爲空」的東西。首先設置變量,然後取消設置對我來說聽起來沒有效率。 –

相關問題