J'ai des clés de tableau php qui sont remplies de beaucoup de caractères étranges.
Est-ce permis? Y a-t-il des contraintes à ce que je ne peux pas utiliser?
J'ai des clés de tableau php qui sont remplies de beaucoup de caractères étranges.
Est-ce permis? Y a-t-il des contraintes à ce que je ne peux pas utiliser?
Réponses:
Selon le manuel :
La clé peut être un entier ou une chaîne. La valeur peut être de n'importe quel type.
En outre, les conversions de clés suivantes se produiront:
- Les chaînes contenant des entiers valides seront converties en type entier. Par exemple, la clé "8" sera en fait stockée sous 8. Par contre "08" ne sera pas converti, car ce n'est pas un entier décimal valide.
- Les flottants sont également convertis en nombres entiers, ce qui signifie que la partie fractionnaire sera tronquée. Par exemple, la clé 8.7 sera en fait stockée sous 8.
- Les booléens sont également convertis en entiers, c'est-à-dire que la clé true sera en fait stockée sous 1 et la clé false sous 0.
- Null sera converti en chaîne vide, c'est-à-dire que la clé null sera en fait stockée sous "".
- Les tableaux et les objets ne peuvent pas être utilisés comme clés. Cela entraînera un avertissement: Type de décalage illégal.
Le manuel encore :
Une chaîne est une série de caractères, où un caractère est identique à un octet. Cela signifie que PHP ne prend en charge qu'un jeu de 256 caractères et n'offre donc pas de support Unicode natif. Voir les détails du type de chaîne.
Donc, en bref, n'importe quelle chaîne peut être une clé. Et une chaîne peut contenir toutes les données binaires (jusqu'à 2 Go). Par conséquent, une clé peut être n'importe quelle donnée binaire (puisqu'une chaîne peut être n'importe quelle donnée binaire).
Quelques abus aléatoires (valides) des clés de tableau:
$w = array(chr(0) => 'null byte?', chr(rand(0, 255)) => 'random byte?');
var_dump($w);
La clé doit être une chaîne ou un entier. Il y a quelques moulages qui ont lieu, mais je pense que le manuel explique bien:
La clé peut être un entier ou une chaîne. La valeur peut être de n'importe quel type.
En outre, les conversions de clés suivantes se produiront:
- Les chaînes contenant des entiers valides seront converties en type entier. Par exemple, la clé "8" sera en fait stockée sous 8. Par contre "08" ne sera pas converti, car ce n'est pas un entier décimal valide.
- Les flottants sont également convertis en nombres entiers, ce qui signifie que la partie fractionnaire sera tronquée. Par exemple, la clé 8.7 sera en fait stockée sous 8.
- Les booléens sont également convertis en entiers, c'est-à-dire que la clé true sera en fait stockée sous 1 et la clé false sous 0.
- Null sera converti en chaîne vide, c'est-à-dire que la clé null sera en fait stockée sous "".
- Les tableaux et les objets ne peuvent pas être utilisés comme clés. Cela entraînera un avertissement: Type de décalage illégal.
J'ai trouvé cette réponse à la recherche de plus d'informations sur un problème que j'avais. J'utilisais des chaînes avec des caractères UTF-8, qui ne fonctionneraient pas comme des clés 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 faire cela.
$str = md5("R&D - Solution");
$arr = array( md5("R&D - Solution") => "Research" );
echo $arr[$str]; // works!
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 aucune restriction spéciale sur les chaînes de clés de tableau. En d'autres termes: tant que c'est une chaîne, tout est permis.
Si des clés complexes provoquent une erreur "d'index non défini", il se peut que vous ayez simplement un problème de "trim".
Je devenais fou parce qu'une clé complexe crachait l'erreur "index indéfini" et je pensais que c'était peut-être une violation de syntaxe. La clé de tableau à l'origine de l'erreur a été construite à partir d'un champ d'une requête de base de données MySQL que je convertissais en clé et que j'utilisais dans un nouveau tableau. La clé ressemblait à ceci: pl_1DNKoiJKwotCqAycickBVhTy
et voici comment le code a été construit.
//new array created from database query
$new_array[$dbquery['fieldname']] = {some value};
//key value found in field of second array
$keyval = $array_two['fieldname'];
//this produced the "undefined index" error
echo $new_array[$keyval];
quand, en fait, le $keyval
et $dbquery['fieldname']
semblait être une correspondance parfaite (vérifiée visuellement en faisant écho à la fois au navigateur). Le mystère a été résolu en utilisant simplement trim
dans la deuxième déclaration comme ceci: $keyval = trim($array_two['fieldname']);
Une fois «coupé», php ne se plaignait plus.
En espérant que cela sauve d'autres de certains moments frustrants ...
Personnellement, je n'ai eu aucun problème avec les caractères inhabituels dans les clés de tableau. Ce qui est et n'est pas légal n'est pas bien documenté, sauf pour dire que la clé doit être un scalaire. Votre meilleur pari est d'essayer et de voir.
Dans le tableau php, vous ne pouvez pas utiliser la clé: 2.3 ou les nombres décimaux
Encoder la page php en ANSI "é" pourra être utilisée (Cinéma n'apparaîtra pas comme Cinéma). Dans Notepad ++, utilisez simplement le menu Encode => Convert ANSI et enregistrez
é
n'est pas présent, que faire si l'OP n'utilise pas Notepad ++ après tout?
$a = (object) ['@km³' => 123]; error_log($a->@km³);