2009-05-19 118 views
17

$ str [n]和$ str {n}之間的區別是$ str是一個字符串。PHP:字符串索引

我注意到兩者似乎都是一樣的,只是{}在我找到的任何文檔中都沒有發生。

+0

我發現它的[字符串文檔】在(http://php.net /manual/en/language.types.string.php#language.types.string.substr):「注意:爲了相同的目的,也可以使用大括號來訪問字符串,如`$ str {42}`中所示。」 (但正如答案中所述,'[]`語法是更好的選擇) – 2017-04-12 07:27:34

+0

在這個問題上也討論了這個話題:[獲取字符串的第一個字符與$ str \ [0 \]](http:/ /stackoverflow.com/questions/1972100/getting-the-first-character-of-a-string-with-str0)。 – 2017-04-12 07:35:42

回答

27

它們是相同的。但是,他們正在擺脫{}語法,因此您應該使用[]

According to the manual:字符串內

性狀可以通過指定被訪問和修改的零基礎使用正方形陣列括號,如在$str[42]後的字符串所需的字符的偏移。爲了這個目的,可以將字符串看作一組字符。當您想要提取或替換多於一個字符時,可以使用功能substr()substr_replace()

注意:從PHP 7.1.0起,還支持負的字符串偏移量。這些指定了字符串末尾的偏移量。以前,用於讀取的負偏移發出E_NOTICE(產生空字符串)和E_WARNING(寫字符串不變)。

注意:字符串也可以使用大括號來訪問,如$str{42},出於同樣的目的。

+3

大括號`{}`是Perl哈希的遺留物,並且正在被放棄。 – Kekoa 2009-05-19 22:06:41

10

要小心,$str[n]$str{n}給出String n個字節,而不是String第n個字符。對於多字節編碼(UTF-8等),一個字符不需要是一個字節。

$str{0} - 串

mb_substr($str, 0, 1)的第一字節 - 串的第一個字符(包括多字節字符集)

http://php.net/mb_substr