Ungültiges Argument für foreach () angegeben
Oft passiert es mir, Daten zu handhaben, können Sie entweder ein array oder ein null-variable und füttern einige foreach
mit diesen Daten.
$values = get_values();
foreach ($values as $value){
...
}
Wenn Sie füttern eine foreach-mit Daten, die nicht ein array erhalten Sie eine Warnung:
Warnung: Invalid argument für foreach geliefert() in [...]
Vorausgesetzt, es ist nicht möglich, umgestalten der get_values()
Funktion immer ein array zurückgeben (Abwärtskompatibilität, nicht verfügbar ist-source-code, was auch immer aus anderen Gründen), Frage ich mich, welche ist die sauberste und effizienteste Weg, um zu vermeiden, dass diese Warnungen:
- Casting
$values
array - Initialisieren
$values
array - Einwickeln der
foreach
mit einemif
- Andere (bitte vorschlagen)
InformationsquelleAutor der Frage Roberto Aloi | 2010-04-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich persönlich finde, dass die meisten sauber - nicht sicher, ob es das effizienteste, Geist!
Der Grund für meine Präferenz ist es nicht zuordnen, ein leeres array, wenn Sie haben nichts, um mit zu beginnen sowieso.
InformationsquelleAutor der Antwort Andy Shellam
Wie über dieses? viel sauberer und alles in eine einzige Zeile.
InformationsquelleAutor der Antwort Ajith R Nair
Normalerweise verwende ich ein Konstrukt wie diesem:
Beachten Sie, dass diese Besondere version ist noch nicht getestet, entspricht dessen typisierter direkt in SO aus der Erinnerung.
Edit: Hinzugefügt Überfahrbar überprüfen
InformationsquelleAutor der Antwort Kris
Bitte verlassen Sie sich nicht auf casting als Lösung
obwohl andere vorschlagen, diese als gültige option, einen Fehler zu vermeiden, könnte es eine andere Ursache.
Bewusst sein: Wenn Sie erwarten, dass eine bestimmte form eines Arrays zurückgegeben werden, könnte dies fehlschlagen. Mehr Kontrollen sind erforderlich.
Ich schrieb einen schnellen test, um dieses problem.
(Hier ist ein backup-Test im Fall der erste test-url fehlschlägt.)
Enthalten sind tests für:
null
false
true
eineclass
einearray
undundefined
.Immer prüfen Sie Ihre Eingabe vor der Verwendung in foreach. Vorschläge:
$array = is_array($var) or is_object($var) ? $var : [] ;
try{}catch(){}
Blöckearray_key_exists
auf einen bestimmten Schlüssel, oder testen Sie die Tiefe ein array (wenn es eine ist !).InformationsquelleAutor der Antwort AARTT
Versuchen Sie dies:
😉
InformationsquelleAutor der Antwort GigolNet Guigolachvili
Problem ist immer null und das Casting ist in der Tat der Reinigungslösung.
InformationsquelleAutor der Antwort boctulus
Zunächst jede variable muss initialisiert werden. Immer.
Casting ist keine option.
wenn get_values(); zurückgeben können verschiedene Variablen vom Typ dieser Wert muss überprüft werden, natürlich.
InformationsquelleAutor der Antwort Your Common Sense
Mehr prägnante Erweiterung der @Kris-code
besonders für die Verwendung im inneren template-code
InformationsquelleAutor der Antwort HongKilDong
Diese doesen ' T prüfen Sie, ob es ein array ist, aber überspringt die Schleife, wenn die variable null oder ein leeres array.
InformationsquelleAutor der Antwort T30
Wenn Sie mit php7 und Sie behandeln möchten, werden nur Undefinierte Fehler sind, ist dies die sauberste IMHO
InformationsquelleAutor der Antwort Edwin Rodríguez
Ich bin nicht sicher, ob dies der Fall ist, aber dieses problem scheint aufzutreten, eine Anzahl von Zeiten, wenn die Migration von wordpress-Seiten oder Migration von dynamischen Websites im Allgemeinen. Ist dies der Fall, stellen Sie sicher, dass die hosting-Migration verwendet die gleiche PHP-version Ihrer alten Website verwendet.
Wenn Sie nicht migrieren Ihre Website und das ist nur ein problem, versuchen, die Aktualisierung auf PHP 5. Dieser kümmert sich um einige dieser Probleme zu lösen. Mag wie eine dumme Lösung, aber hat den trick für mich.
InformationsquelleAutor der Antwort Erik
Ausnahmefall für diese Bekanntmachung tritt auf, wenn Sie Arrays auf null im inneren foreach-Schleife
InformationsquelleAutor der Antwort Farid Movsumov
Wie wäre es mit dieser Lösung:
InformationsquelleAutor der Antwort Julian
Scheint es auch einen Zusammenhang mit der Umwelt:
Hatte ich, dass "invalid argument geliefert für foreach ()" - Fehler nur in der dev-Umgebung, aber nicht in prod (ich arbeite auf dem server (nicht localhost).
Trotz der Fehler ein var_dump gekennzeichnet, dass das array war auch da (in beiden Fällen app und dev).
Den
if (is_array($array))
rund um dieforeach ($array as $subarray)
das problem gelöst.Sorry, dass ich nicht die Ursache erklären, aber es dauerte eine Weile zu Abbildung eine Lösung, die ich dachte, eine bessere Nutzung dieses als eine Beobachtung.
InformationsquelleAutor der Antwort araldh
Verwende ich eine Kombination aus leeren, isset und is_array als
InformationsquelleAutor der Antwort Akintunde Olawale
Verwenden is_array Funktion, wenn Sie pass-array mit der foreach-Schleife.
InformationsquelleAutor der Antwort Super Model
Warning invalid argument für foreach geliefert() Anzeige tweets.
gehen Sie zu " /wp-content/plugins/display-tweets-php ".
Dann stecken Sie diesen code auf Linie 591, läuft Es perfekt.
InformationsquelleAutor der Antwort Saad Khanani
ich würde das gleiche tun wie Andy, aber ich'ld verwenden Sie die "leeren" - Funktion.
etwa so:
InformationsquelleAutor der Antwort as_bold_as_love