在字符串$str$中,$str[n]$和$str{n}$有什么区别?
我注意到它们似乎都可以起到相同的作用,但是我没有在任何文档中找到关于{}的使用。
它们是相同的。但是,他们正在摆脱{}
语法,所以您应该选择[]
。
根据手册:
使用方括号指定字符串后面基于零的偏移量来访问和修改字符串中的字符,例如
$str[42]
。对于此目的,请将字符串视为字符数组。当您想要提取或替换多个字符时,可以使用substr()
和substr_replace()
函数。注意:自PHP 7.1.0起,也支持负字符串偏移量。这些指定从字符串末尾的偏移量。以前,负偏移会发出读取的
E_NOTICE
(产生空字符串)和写入的E_WARNING
(保留字符串不变)。注意:在PHP 8.0.0之前,还可以使用大括号访问字符串,例如$ str {42},用于同样的目的。从PHP 7.4.0开始,这种花括号语法已弃用,并且在PHP 8.0.0中不再受支持。
{}
来自 Perl 哈希表的遗留物,目前正在被弃用。 - Kekoa注意,$str[n]
和$str{n}
返回的是字符串String
的第n个字节,而不是第n个字符。对于多字节编码(UTF-8等),一个字符并不需要占用一个字节。
$str[0]
返回字符串的第一个字节
mb_substr($str, 0, 1)
返回字符串的第一个字符(包括多字节字符集)
mb_internal_encoding('UTF-8');
或在 php.ini 中使用 mbstring.internal_encoding='UTF-8'
。 - Mark Fox$name = "Ömar"
,代码使用$name[0]
检索第一个字母,因为 "Ö"、"Ä" 等需要多于一个字节的UTF-8格式错误字符,导致出现错误。
$str{42}
,目的相同。"(但正如答案中所述,[]
语法更好)。 - Gras Double