2013-06-19 85 views
7

我知道,在PHP字符串.....字符串,但是比如我可以做字符串作爲PHP數組

$str = 'String'; 
echo $str[0]; 
echo $str[1]; 

//result 
S 
t 

echo count($str) 
//result 
1 

爲什麼我可以走線槽他們像一個數組中,但不能指望他們數數? (我知道我可以使用strlen())

+1

因爲用'[]'索引字符串是語法糖。字符串不是PHP中的數組。 – Tomalak

回答

20

因爲這就是它的工作原理。您可以使用括號表示法訪問特定的字節偏移量。但是,這並不意味着字符串是一個數組,你可以使用期望數組的函數。 $string[int]substr($string, int, 1)的語法糖,僅此而已。

+0

我寧願給他們打電話*字符偏移*,但你說得對糖。 – GolezTrol

+2

大聲笑,及時的評論。那麼,他們*不*字符偏移!試試:'$ s ='漢字'; $ s [1];' – deceze

+0

大聲笑,確實很好的時機。我不應該使用'characters',而應該使用'code points',但'bytes'似乎涉及到底層結構,並假定PHP不是,也不會是UTF16或任何其他多字節字符集。我必須承認,雖然我不確定,但我無法找到文檔要說的話。 – GolezTrol

6

因爲字符串不是數組。它們允許您使用相同的語法來查找字母以方便您,但這就是它的原因。

數組也可以有鍵,也可以排序。如果字符串是完整數組,則可以爲每個字母指定一個鍵,或者使用某個數組函數按字母順序排列字母。

長話短說:字符串不是數組,即使它們的語法的一小部分是相似的。

+1

我認爲區分「字母」和*字節偏移量是很重要的。 :) – deceze