Ich erhalte einen seltsamen PHP-Fehler, nachdem ich meine PHP-Version auf 5.4.0-3 aktualisiert habe.
Ich habe dieses Array:
Array
(
[host] => 127.0.0.1
[port] => 11211
)
Wenn ich versuche, so darauf zuzugreifen, erhalte ich seltsame Warnungen
print $memcachedConfig['host'];
print $memcachedConfig['port'];
Warning: Illegal string offset 'host' in ....
Warning: Illegal string offset 'port' in ...
Ich möchte wirklich nicht nur meine php.ini bearbeiten und die Fehlerstufe zurücksetzen.
$memcachedConfig
ist das nicht Array. Showvar_dump($memcachedConfig);
var_export($memcachedConfig)
kurz vor dem "Drucken".Antworten:
Bitte versuchen Sie es auf diese Weise .... Ich habe diesen Code getestet .... Es funktioniert ....
quelle
include_once($file);
. Das Array wurde korrekt erstellt (die Debug-Informationen zeigen dies), musste jedoch manuell in ein anderes Array kopiert werden, bevor es ohne die PHP-Warnmeldung "Ungültiger Stringoffset" verwendet werden konnte.Der Fehler
Illegal string offset 'whatever' in...
bedeutet im Allgemeinen: Sie versuchen, eine Zeichenfolge als vollständiges Array zu verwenden.Dies ist tatsächlich möglich, da Strings in PHP als Arrays einzelner Zeichen behandelt werden können. Sie denken also, $ var ist ein Array mit einem Schlüssel, aber es ist nur eine Zeichenfolge mit numerischen Standardschlüsseln, zum Beispiel:
Sie können dies hier in Aktion sehen: http://ideone.com/fMhmkR
Für diejenigen, die zu dieser Frage kommen und versuchen, die Unbestimmtheit des Fehlers in etwas zu übersetzen, das sie tun können, wie ich es war.
quelle
fetchAll(PDO::FETCH_ASSOC)
stattdessen verwendetfetch(PDO::FETCH_ASSOC)
und perfekt gearbeitet.$variablename = [];
zweimal an einem anderen Teil meines Codes verwendet, mit$variablename = "test";
dem die Fehlermeldung verursacht wurde.TL; DR
Sie versuchen, auf
string
ein Array zuzugreifen, als wäre es ein Array mit einem Schlüssel, der a iststring
.string
werde das nicht verstehen. Im Code können wir das Problem sehen:In der Tiefe
Lassen Sie uns diesen Fehler sehen:
Was sagt es? Es heißt, wir versuchen, die Zeichenfolge
'port'
als Offset für eine Zeichenfolge zu verwenden. So was:Was verursacht das?
Aus irgendeinem Grund haben Sie eine erwartet
array
, aber Sie haben einestring
. Nur eine Verwechslung. Vielleicht wurde Ihre Variable geändert, vielleicht war es nie einearray
, es ist wirklich nicht wichtig.Was kann getan werden?
Wenn wir wissen, dass wir eine haben sollten
array
, sollten wir einige grundlegende Fehlerbehebungen durchführen, um festzustellen, warum wir keine habenarray
. Wenn wir nicht wissen, ob wir einarray
oder haben werdenstring
, werden die Dinge etwas schwieriger.Was wir tun können , sind alle Arten von Überprüfungen, um sicherzustellen, dass wir keine Hinweise, Warnungen oder Fehler mit Dingen wie
is_array
undisset
oder habenarray_key_exists
:Es gibt einige subtile Unterschiede zwischen
isset
undarray_key_exists
. Wenn beispielsweise der Wert von$array['key']
istnull
, wirdisset
zurückgegebenfalse
.array_key_exists
Ich werde nur überprüfen, ob der Schlüssel existiert .quelle
Hier gibt es viele gute Antworten - aber ich fand mein Problem viel einfacher.
Ich habe versucht, den folgenden Befehl auszuführen:
und ich bekam diesen
illegal string
Fehler,$x['name']
weil ich das Array nicht zuerst definiert hatte. Also habe ich die folgende Codezeile eingefügt, bevor ich versuche, Dinge zuzuweisen$x[]
:und es hat funktioniert.
quelle
Ein bisschen spät zur Frage, aber für andere, die suchen: Ich habe diesen Fehler durch Initialisieren mit einem falschen Wert (Typ) erhalten:
Der richtige Weg ist:
quelle
Ab PHP 5.4 müssen wir denselben Datentypwert übergeben, den eine Funktion erwartet. Beispielsweise:
Wenn beim Aufrufen dieser Funktion ein Zeichenfolgenwert wie folgt angegeben wird:
Dies generiert eine unzulässige Offset-Warnung aufgrund einer Nichtübereinstimmung des Datentyps. Um dies zu lösen, können Sie Folgendes verwenden
settype
:quelle
Gehen Sie folgendermaßen vor, um das Array zu überprüfen:
quelle
In meinem Fall ändere ich mysql_fetch_assoc in mysql_fetch_array und löse. Die Lösung dauert 3 Tage :-( und die anderen Versionen meines Proyect laufen mit fetch assoc.
quelle
In meinem Fall habe ich es gelöst, als ich die Funktion geändert habe, die SQL- Abfragen nach folgender
return json_encode($array)
Zeit ausführt : dann:return $array
quelle
Es funktioniert bei mir:
Testcode von mir:
Ausgabe:
55
Überprüfen Sie es Jungs. Vielen Dank
quelle
benutz einfach
Vor
Dies liegt daran, dass Sie niemals definieren, was $ memcachedConfig ist. Daher werden standardmäßig Zeichenfolgen und keine Arrays behandelt.
quelle
Ich habe dieses Problem mit der Funktion trim () gelöst. Das Problem war mit dem Platz.
Lass es uns versuchen
Ich hoffe, dies wird dir helfen.
quelle
Nur für den Fall, dass es jemandem hilft, habe ich diesen Fehler erhalten, weil ich vergessen habe, ein serialisiertes Array zu unserialisieren. Das ist definitiv etwas, das ich prüfen würde, wenn es auf Ihren Fall zutrifft.
quelle
Es ist alt, aber falls jemand davon profitieren kann. Sie erhalten diesen Fehler auch, wenn Ihr Array leer ist.
In meinem Fall hatte ich:
was ich geändert habe zu:
quelle
Ich denke, der einzige Grund für diese Nachricht ist, dass das Ziel-Array tatsächlich ein Array wie ein String usw. (JSON -> {"host": "127.0.0.1"}) ist
quelle
Für PHP
Stellen Sie einfach sicher, dass der zurückgegebene Wert nicht leer ist. Dieses Beispiel war für PHP gedacht. Finden Sie heraus, wie Sie überprüfen können, ob ein Array in anderen Sprachen leer ist.
quelle