作為 PHP 開發者,大家可能都會接觸到 count() 這個函數。在大多數情況下,count() 函數都是用來獲取數組元素個數。但是在某些時候,這個函數并不如你所想的那樣簡單。
對于數組來說,count() 函數的使用很多人都非常熟悉。例如:
$fruits = array('apple', 'banana', 'peach'); $count = count($fruits); echo $count; // 輸出: 3
上面的代碼可以很好地獲取數組元素的個數,但是有時,會出現一些比較奇怪的現象,比如 count() 返回了 0。下面我們來看看這種現象出現的原因:
首先,如果傳入的不是一個數組,而是一個空的字符串、一個空的對象、或者是一個數字 0,count() 返回的就會是 1。例如:
$count = count(''); // 返回 1 $count = count(0); // 返回 1 $count = count(new stdClass()); // 返回 1
其次,如果傳入的是一個布爾值,會直接報錯 Fetal error。
$count = count(true); // 報錯
那么 count() 返回 0 的情況到底有哪些呢?下面我們分別來看幾種典型情況。
情況一:數組內元素全部為 0 或 false
當數組內元素全部為 0 或 false 時,count() 函數會返回 0。例如:
$nums = array(0, false, 0); $count = count($nums); echo $count; // 輸出: 0
這種情況下,我們可以使用 array_filter() 函數將數組內的 0 或 false 過濾掉,這樣 count() 就能正確返回數組元素個數了。例如:
$nums = array(0, false, 0); $nums = array_filter($nums); $count = count($nums); echo $count; // 輸出: 0
情況二:傳入 null 或未定義變量
當傳入的變量未定義或者是 null 時,count() 函數會返回 0。例如:
$count = count($undefined); // 返回 0 $count = count(null); // 返回 0
這種情況下可以通過 isset() 判斷變量是否定義來避免錯誤。例如:
if(isset($some_variable)){ $count = count($some_variable); }
情況三:count() 函數不得用于字符串
如果 count() 函數用于字符串,則也會返回 0。例如:
$count = count('hello'); // 返回 0
這種情況下,我們需要使用 strlen() 函數來獲取字符串的長度。例如:
$str = 'hello'; $count = strlen($str); echo $count; // 輸出: 5
綜上,雖然 count() 函數看似簡單,但其中的坑并不少。我們需要特別注意使用 count() 函數的場景,避免不必要的錯誤。同時,在使用其他函數時,也要留意函數的返回值,以免出現意料之外的情況。