2009-05-19 11 views
17

¿Cuál es la diferencia entre $ str [n] y $ str {n}, dado que $ str es una cadena.PHP: indización de cadena

Noté que ambos parecen funcionar igual, excepto que {} no aparece en ninguna documentación que encontré.

+0

me encontré en el [Documentación cadena] (http://php.net /manual/en/language.types.string.php#language.types.string.substr): "Nota: también se puede acceder a cadenas utilizando llaves, como en '$ str {42}', para el mismo propósito. " (pero como se indica en las respuestas, la sintaxis '[]' es una opción mejor) –

+0

El tema también se trata en esta pregunta: [Obtener el primer carácter de una cadena con $ str \ [0 \]] (http://stackoverflow.com/questions/1972100/getting-the-first-character-of-a-string-with-str0). –

Respuesta

27

Son lo mismo. Sin embargo, se están deshaciendo de la sintaxis {}, por lo que debe ir con [].

According to the manual:

Caracteres dentro de cadenas se puede acceder y modificar mediante la especificación de la base cero desplazamiento del carácter deseado después de la cadena usando soportes de matriz cuadrada, como en $str[42]. Piense en una cadena como una matriz de caracteres para este propósito. Las funciones substr() y substr_replace() se pueden usar cuando desee extraer o reemplazar más de 1 carácter.

Nota: A partir de PHP 7.1.0, también se admiten compensaciones de cadena negativas. Estos especifican el desplazamiento desde el final de la cadena. Anteriormente, las compensaciones negativas emitían E_NOTICE para lectura (produciendo una cadena vacía) y E_WARNING para escritura (dejando la cadena intacta).

Nota: también se puede acceder a cadenas utilizando llaves, como en $str{42}, para el mismo propósito.

+3

Las llaves '{}' son heredadas de los hashes de Perl, y se están abandonando. – Kekoa

10

tener cuidado, $str[n] y $str{n} dan enésimo byte de String, no enésimo carácter de String. Para la codificación multibyte (UTF-8, etc.) no es necesario que un carácter sea un byte.

$str{0} - primer byte de la cadena

mb_substr($str, 0, 1) - primer carácter de la cadena (incluyendo juegos de caracteres de varios bytes)

http://php.net/mb_substr

+0

Vale la pena señalar que ** antes de PHP 5.6 ** la codificación predeterminada del módulo [mbstring] (http://php.net/mbstring) no es UTF-8 - esto se puede cambiar en dos lugares: dentro de scripts php ' mb_internal_encoding ('UTF-8'); '-o-- php.ini' mbstring.internal_encoding = 'UTF-8'' –