89 votes

Caractères autorisés dans les clés de tableau php?

J'ai quelques clés de tableau php qui sont remplies avec beaucoup de caractères étranges.

Est-ce permis? Y a-t-il des contraintes à ce que je ne peux pas utiliser?

96voto

Corbin Points 17420

Selon le manuel:

La clé peut être un entier ou une chaîne de caractères. La valeur peut être de n'importe quel type.

En outre, les clés suivants jette:

  • Les chaînes contenant un entier valide sera lancé pour le type integer. E. g. la touche "8" seront effectivement stockées sous 8. Sur l'autre main "08" ne soient pas jetés, car elle n'est pas valide d'un nombre décimal.
  • Les flotteurs sont également exprimés en nombres entiers, ce qui signifie que la partie fractionnaire sera tronqué. E. g. la clé de 8,7 sera effectivement stockées sous 8.
  • Bool sont exprimés en nombres entiers, trop, c'est à dire la clé de la vraie seront effectivement stockées sous 1 et la clé de faux-dessous de 0.
  • Null sera jeté à la chaîne vide, c'est à dire la clé null sera effectivement stockées sous "".
  • Les tableaux et les objets ne peuvent pas être utilisés comme clés. Ce faisant, il recevra un avertissement: Illégal type de décalage.

Le manuel de nouveau:

Une chaîne est une suite de caractères, où un personnage est le même que d'un octet. Cela signifie que PHP ne supporte que 256-jeu de caractères, et donc n'offre pas natif de l'Unicode. Voir les détails du type chaîne de caractères.

Donc, en bref, n'importe quelle chaîne peut être une clé. Et une chaîne de caractères peut contenir des données binaires (jusqu'à 2 go). Par conséquent, une clé peut être des données binaires (depuis une chaîne de caractères peut être des données binaires).

Certains aléatoire (valide) les abus de la matrice de touches:

$w = array(chr(0) => 'null byte?', chr(rand(0, 255)) => 'random byte?');
var_dump($w);

12voto

Matthew Points 25748

La clé doit être une chaîne ou un entier. Il y a quelques moulages qui prennent de la place, mais je pense que le manuel fait un bon travail en expliquant:

La clé peut être un entier ou une chaîne de caractères. La valeur peut être de n'importe quel type.

En outre, les clés suivants jette:

  • Les chaînes contenant un entier valide sera lancé pour le type integer. E. g. la touche "8" seront effectivement stockées sous 8. Sur l'autre la main "08" ne soient pas jetés, car elle n'est pas valide d'un nombre décimal.
  • Les flotteurs sont également exprimés en nombres entiers, ce qui signifie que la partie fractionnaire sera tronqué. E. g. la clé de 8,7 sera effectivement stockées sous 8.
  • Bool sont exprimés en nombres entiers, trop, c'est à dire la clé de la vraie seront effectivement stockées sous 1 et la clé de faux-dessous de 0.
  • Null sera jeté à la chaîne vide, c'est à dire la clé null sera effectivement stockées sous "".
  • Les tableaux et les objets ne peuvent pas être utilisés comme clés. Ce faisant, il recevra un avertissement: Illégal type de décalage.

11voto

Rob Points 43

J'ai trouvé cette réponse à la recherche de plus d'informations sur un problème que j'ai eu. J'utilisais des chaînes contenant des caractères UTF-8, ce qui ne fonctionnerait pas comme clé d'un tableau que j'avais.

Quelque chose comme

 $str = "R&D - Solution";
$arr = array( "R&D - Solution" => "Research" );
echo $arr[$str];  // did not work
 

La solution (ni grande ni intelligente) pour moi était de le faire ..

 $str = md5("R&D - Solution");
$arr = array( md5("R&D - Solution") => "Research" );
echo $arr[$str];  // works!
 

6voto

deceze Points 200115

Les clés de tableau PHP peuvent être des entiers ou des chaînes. Les chaînes PHP sont des tableaux d'octets, c'est-à-dire des séquences d'octets. Il n'y a pas d'autres types de chaînes et PHP n'impose pas de restrictions particulières aux chaînes de clés de tableaux. En d'autres termes: tant que c'est une chaîne, tout est permis.

5voto

Marc B Points 195501

Tout ce que vous pouvez insérer dans une chaîne PHP peut être utilisé comme clé de tableau. Il n'y a aucune limite sur les caractères autorisés.

 $a = array();

$x = 'long string of random garage';
echo $a[$x]; // this is ok

$x = array();
echo $a[$x]; // not ok
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X