2011-06-24 89 views
11

一個字符串是一個字符數組,對嗎?如果是這樣,那麼爲什麼count()對字符串不產生與strlen()相同的結果?PHP - 爲什麼count()不像strlen()那樣工作?

+15

PHP並不總是像你想要的那樣合理;-) –

+0

@Matt Ellen對於任何lang,wh都是一樣的你不知道爲什麼不同的任務有不同的功能? – Raoul

+0

@Raoul:這是什麼意思?不同的類型有不同的功能適用於他們?當然,但在某些語言中,字符列表/數組的列表/任何其他數組可以被視爲相同。 –

回答

15

字符串是C,C++和Java中的字符數組。在PHP中,它不是。 請記住,PHP是一種非常鬆散的語言,你可以用[]選擇器從PHP字符串中獲得一個字符,但它仍然不能使它成爲一個數組。

+0

當語言做到這一點時,我討厭它。當我看到數組符號時,我自動認爲我正在處理一個實際的數組。 PHP手冊沒有明確地說「儘管有索引器,但字符串不是數組」。 –

+0

字符串與數組相同的語言很少。也許在C語言中,但任何更高級別的編程語言都會有一個特殊的字符串結構。同樣,在C++中,std :: string可以像數組一樣訪問,但sizeof(std :: string)不會給你長度。只需使用正確的工具來完成正確的工作。 –

3

count()統計Array中的條目數。

$test = array(1,2,3); 
echo count($test); 

輸出:3

你爲什麼要在stringstrlen()能做到這一點使用count()?你不確定你的輸入是string還是array?然後用is_array()來檢查。

+1

是的,我知道。如果一個字符串是一個字符數組,那麼count()應該返回該字符串中的字符數。 –

+0

你可以用英文來調用一個字符串數組,但在PHP中它不是一個字符數組,它是一個字符串。 – Kokos

+1

Kokos,問題更多的是爲什麼在PHP中,爲什麼字符串的處理方式與普通數組的處理方式不同。例如,Haskell將字符串視爲字符列表,因此您可以在字符串上使用Haskell的所有列表函數。 –

0

count獲取數組中元素的個數,srtlen獲取一個字符串的長度。這是在文檔:

http://php.net/manual/en/function.strlen.php

+0

是的,我知道。我在問爲什麼是這樣。 –

+0

@ kevinmajor1再次,如果您閱讀文檔,則會覆蓋文檔。 – Raoul

+0

我已閱讀文檔。他們只是不像我所希望的那樣明確。看到我上面的評論爲什麼我立即認爲字符串,確實是字符數組。 –

19

除非它是一個對象,count投射其參數陣列,並且

count((array) "example") 
= count(array("example")) 
= 1 
+0

優秀的答案! – CoR

+0

這個答案比接受的「不是數組」答案好得多,而且是正確的答案。 – person27

0

計數爲數組值計數 更preferabaly用戶strlen的其計數只有字符中沒有字符.....

1

特定編程語言在內部處理的字符串究竟是什麼,並不一定意味着您可以對其進行相應處理,以便「相關」的數據類型。您所描述的內容在普通C中可能是可能的。但PHP不是C,因此不符合相同的特徵。

1

字符串只是一系列字符,並且count只計數數組中的元素數。

using $ string [$ index];它只是有點事快捷方式,幫助您找到N個字符,

你可以使用count(explode('',$string));這大概是什麼strlen

這樣的教訓今天是

計數==數組長度

strlen ==字符串長度

相關問題