409 Stimmen

Ungültiges Argument für foreach() geliefert

Es passiert mir oft, dass ich Daten verarbeiten muss, die entweder ein Array oder eine Null-Variable sein können, und dass ich einige foreach mit diesen Daten.

$values = get_values();

foreach ($values as $value){
  ...
}

Wenn Sie eine foreach mit Daten füttern, die kein Array sind, erhalten Sie eine Warnung:

Warnung: Ungültiges Argument geliefert für foreach() in [...]

Angenommen, es ist nicht möglich, die get_values() Funktion immer ein Array zurückgeben (Abwärtskompatibilität, nicht verfügbarer Quellcode, welcher Grund auch immer), frage ich mich, was der sauberste und effizienteste Weg ist, um diese Warnungen zu vermeiden:

  • Gießen $values zum Array
  • Initialisierung $values zum Array
  • Einpacken der foreach mit einer if
  • Sonstiges (bitte vorschlagen)

3voto

Saad Khanani Punkte 39

Warnung: Ungültiges Argument geliefert für foreach() Tweets anzeigen. gehen zu /wp-content/plugins/display-tweets-php . Fügen Sie dann diesen Code in Zeile 591 ein, und er wird einwandfrei funktionieren.

if (is_array($tweets)) {
    foreach ($tweets as $tweet) 
    {
        ...
    }
}

3voto

HongKilDong Punkte 1266

Prägnantere Erweiterung von @Kris' Code

function secure_iterable($var)
{
    return is_iterable($var) ? $var : array();
}

foreach (secure_iterable($values) as $value)
{
     //do stuff...
}

insbesondere für die Verwendung innerhalb von Vorlagencode

<?php foreach (secure_iterable($values) as $value): ?>
    ...
<?php endforeach; ?>

2voto

araldh Punkte 51

Es scheint auch eine Beziehung zur Umwelt zu bestehen:

Ich hatte, dass "ungültiges Argument geliefert foreach()" Fehler nur in der Dev-Umgebung, aber nicht in prod (ich bin auf dem Server arbeiten, nicht localhost).

Trotz des Fehlers zeigte ein var_dump an, dass das Array durchaus vorhanden war (in beiden Fällen app und dev).

En if (is_array($array)) um den foreach ($array as $subarray) das Problem gelöst.

Es tut mir leid, dass ich die Ursache nicht erklären kann, aber da ich eine Weile brauchte, um eine Lösung zu finden, hielt ich es für besser, dies als Beobachtung mitzuteilen.

2voto

Farid Movsumov Punkte 11508

Ein Ausnahmefall für diesen Hinweis tritt auf, wenn Sie das Array innerhalb der foreach-Schleife auf null setzen

if (is_array($values))
{
    foreach ($values as $value)
    {
        $values = null;//WARNING!!!
    }
}

2voto

Mohamad Shabihi Punkte 33

Diese Warnung tritt auf, weil das Array, das Sie verwenden möchten, leer ist. Sie können die folgende Bedingung verwenden:

if ($your_array != false){
   foreach ($your_array as $value){
         echo $value['your_value_name'];
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X