Ich habe einige PHP-Array-Schlüssel, die mit vielen seltsamen Zeichen gefüllt sind.
Ist das erlaubt? Gibt es irgendwelche Einschränkungen für das, was ich nicht verwenden kann?
Ich habe einige PHP-Array-Schlüssel, die mit vielen seltsamen Zeichen gefüllt sind.
Ist das erlaubt? Gibt es irgendwelche Einschränkungen für das, was ich nicht verwenden kann?
Antworten:
Nach dem Handbuch :
Der Schlüssel kann entweder eine Ganzzahl oder eine Zeichenfolge sein. Der Wert kann von einem beliebigen Typ sein.
Zusätzlich werden die folgenden Key Casts auftreten:
- Zeichenfolgen, die gültige Ganzzahlen enthalten, werden in den Ganzzahltyp umgewandelt. ZB wird der Schlüssel "8" tatsächlich unter 8 gespeichert. Andererseits wird "08" nicht umgewandelt, da es sich nicht um eine gültige Dezimalzahl handelt.
- Floats werden auch in Ganzzahlen umgewandelt, was bedeutet, dass der Bruchteil abgeschnitten wird. ZB wird der Schlüssel 8.7 tatsächlich unter 8 gespeichert.
- Bools werden auch in ganze Zahlen umgewandelt, dh der Schlüssel true wird tatsächlich unter 1 und der Schlüssel false unter 0 gespeichert.
- Null wird in die leere Zeichenfolge umgewandelt, dh der Schlüssel null wird tatsächlich unter "" gespeichert.
- Arrays und Objekte können nicht als Schlüssel verwendet werden. Dies führt zu einer Warnung: Unzulässiger Versatztyp.
Das Handbuch noch einmal :
Eine Zeichenfolge besteht aus einer Reihe von Zeichen, wobei ein Zeichen mit einem Byte identisch ist. Dies bedeutet, dass PHP nur einen 256-Zeichen-Satz unterstützt und daher keine native Unicode-Unterstützung bietet. Siehe Details zum Zeichenfolgentyp.
Kurz gesagt, jede Zeichenfolge kann ein Schlüssel sein. Ein String kann beliebige Binärdaten enthalten (bis zu 2 GB). Daher kann ein Schlüssel beliebige Binärdaten sein (da eine Zeichenfolge beliebige Binärdaten sein kann).
Ein zufälliger (gültiger) Missbrauch von Array-Schlüsseln:
$w = array(chr(0) => 'null byte?', chr(rand(0, 255)) => 'random byte?');
var_dump($w);
Der Schlüssel muss eine Zeichenfolge oder eine Ganzzahl sein. Es gibt einige Casts, die stattfinden, aber ich denke, das Handbuch macht eine gute Erklärung:
Der Schlüssel kann entweder eine Ganzzahl oder eine Zeichenfolge sein. Der Wert kann von einem beliebigen Typ sein.
Zusätzlich werden die folgenden Key Casts auftreten:
- Zeichenfolgen, die gültige Ganzzahlen enthalten, werden in den Ganzzahltyp umgewandelt. ZB wird der Schlüssel "8" tatsächlich unter 8 gespeichert. Andererseits wird "08" nicht umgewandelt, da es sich nicht um eine gültige Dezimalzahl handelt.
- Floats werden auch in Ganzzahlen umgewandelt, was bedeutet, dass der Bruchteil abgeschnitten wird. ZB wird der Schlüssel 8.7 tatsächlich unter 8 gespeichert.
- Bools werden auch in ganze Zahlen umgewandelt, dh der Schlüssel true wird tatsächlich unter 1 und der Schlüssel false unter 0 gespeichert.
- Null wird in die leere Zeichenfolge umgewandelt, dh der Schlüssel null wird tatsächlich unter "" gespeichert.
- Arrays und Objekte können nicht als Schlüssel verwendet werden. Dies führt zu einer Warnung: Unzulässiger Versatztyp.
Ich fand diese Antwort und suchte nach weiteren Informationen zu einem Problem, das ich hatte. Ich habe Zeichenfolgen mit UTF-8-Zeichen verwendet, die nicht als Schlüssel für ein Array dienen würden, das ich hatte.
Etwas wie
$str = "R&D - Solution";
$arr = array( "R&D - Solution" => "Research" );
echo $arr[$str]; // did not work
Die (nicht große oder kluge) Lösung für mich war dies zu tun ..
$str = md5("R&D - Solution");
$arr = array( md5("R&D - Solution") => "Research" );
echo $arr[$str]; // works!
PHP-Array-Schlüssel können Ganzzahlen oder Zeichenfolgen sein. PHP-Strings sind Byte-Arrays, dh Folgen von Bytes. Es gibt keine anderen Arten von Zeichenfolgen, und PHP legt ansonsten keine besonderen Einschränkungen für Array-Schlüsselzeichenfolgen fest. Mit anderen Worten: Solange es sich um eine Zeichenfolge handelt, ist alles möglich.
Ich persönlich hatte keine Probleme mit ungewöhnlichen Zeichen in Array-Schlüsseln. Was legal ist und was nicht, ist nicht gut dokumentiert, außer zu sagen, dass der Schlüssel ein Skalar sein muss. Ihre beste Wette ist es, es einfach zu versuchen und zu sehen.
Zusätzlich zu allen Antworten, wie sie wahr sind: Sie können PSRs verwenden , die eine Art Regel zwischen den besten Programmierern darstellen, um einen netten und standardmäßigen Codierungsstil zu haben.
Wenn komplexe Schlüssel einen "undefinierten Index" -Fehler verursachen, liegt möglicherweise einfach ein "Trimm" -Problem vor.
Ich war verrückt, weil ein komplexer Schlüssel den Fehler "undefinierter Index" ausspuckte und ich dachte, es sei vielleicht eine Syntaxverletzung. Der Array-Schlüssel, der den Fehler verursacht, wurde aus einem Feld aus einer MySQL-Datenbankabfrage erstellt, die ich in einen Schlüssel konvertierte und in einem neuen Array verwendete. Der Schlüssel sah so aus: pl_1DNKoiJKwotCqAycickBVhTy
und so wurde der Code aufgebaut.
//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];
wenn in der Tat die $keyval
$dbquery['fieldname']
schien und eine perfekte Übereinstimmung zu sein (visuell überprüft, indem beide an den Browser zurückgegeben wurden). Das Rätsel wurde durch einfaches Verwenden gelösttrim
in der zweiten Aussage$keyval = trim($array_two['fieldname']);
Folgendes verwendet wurde : Einmal "getrimmt", beschwerte sich PHP nicht mehr.
In der Hoffnung, dass dies einige andere vor frustrierenden Momenten bewahrt ...
Codieren Sie die PHP-Seite in ANSI "é" kann verwendet werden (Cinéma wird nicht als Cinéma angezeigt). Verwenden Sie in Notepad ++ einfach das Menü Encode => ANSI konvertieren und speichern
é
es nicht vorhanden ist? Was ist, wenn das OP Notepad ++ doch nicht verwendet?
$a = (object) ['@km³' => 123]; error_log($a->@km³);