2013-06-19 48 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