2009-05-19 5 views
17

Quelle est la différence entre $ str [n] et $ str {n}, étant donné que $ str est une chaîne.PHP: indexation de chaîne

J'ai remarqué que les deux semblent fonctionner de la même manière, sauf que {} n'apparaît dans aucune documentation trouvée.

+0

je l'ai trouvé dans la [documentation de chaîne] (http://php.net /manual/en/language.types.string.php#language.types.string.substr): "Remarque: Les chaînes peuvent également être accédées en utilisant des accolades, comme dans' $ str {42} ', dans le même but." (mais comme indiqué dans les réponses, la syntaxe '[]' est un meilleur choix) –

+0

Le sujet est également discuté sur cette question: [Obtenir le premier caractère d'une chaîne avec $ str \ [0 \]] (http://stackoverflow.com/questions/1972100/getting-the-first-character-of-a-string-with-str0). –

Répondre

27

Ce sont les mêmes. Cependant, ils se débarrassent de la syntaxe {}, donc vous devriez aller avec [].

According to the manual:

caractères dans les chaînes peuvent être consultées et modifiées en spécifiant le décalage du caractère désiré sur la base de zéro après la chaîne en utilisant les supports de matrice carrée, comme dans $str[42]. Pensez à une chaîne comme un tableau de caractères à cette fin. Les fonctions substr() et substr_replace() peuvent être utilisées lorsque vous souhaitez extraire ou remplacer plus d'un caractère.

Remarque: À partir de PHP 7.1.0, les décalages de chaînes négatifs sont également pris en charge. Ceux-ci spécifient le décalage de la fin de la chaîne. Auparavant, les décalages négatifs émis E_NOTICE pour la lecture (donnant une chaîne vide) et E_WARNING pour l'écriture (laissant la chaîne intacte).

Remarque: Les chaînes peuvent également être accessibles à l'aide d'accolades, comme dans $str{42}, dans le même but.

+3

Les accolades '{}' sont héritées des hachages Perl et sont abandonnées. – Kekoa

10

Attention, $str[n] et $str{n} donnent n-ième octet de String, pas de caractère n-ième String. Pour l'encodage multi-octets (UTF-8, etc.), un caractère n'a pas besoin d'être un octet.

$str{0} - premier octet de chaîne

mb_substr($str, 0, 1) - premier caractère de chaîne (y compris les jeux de caractères multi-octets)

http://php.net/mb_substr

+0

Il est à noter que ** avant PHP 5.6 ** le codage par défaut du module [mbstring] (http://php.net/mbstring) n'est pas UTF-8 - cela peut être changé à deux endroits: dans les scripts php ' mb_internal_encoding ('UTF-8'); '-ou-- php.ini' mbstring.internal_encoding = 'UTF-8'' –