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)

1voto

Erik Punkte 37

Ich bin mir nicht sicher, ob dies der Fall ist, aber dieses Problem scheint bei der Migration von WordPress-Websites oder der Migration dynamischer Websites im Allgemeinen immer wieder aufzutreten. Wenn dies der Fall ist, stellen Sie sicher, dass das Hosting, auf das Sie migrieren, dieselbe PHP-Version verwendet wie Ihre alte Website.

Wenn Sie Ihre Website nicht migrieren und es sich nur um ein aufgetretenes Problem handelt, versuchen Sie, auf PHP 5 zu aktualisieren, um einige dieser Probleme zu beheben. Es mag wie eine dumme Lösung erscheinen, aber bei mir hat es funktioniert.

1voto

Rotimi Punkte 4700

Ich verwende eine Kombination aus empty , isset y is_array como

$array = ['dog', 'cat', 'lion'];

if (!empty($array) && isset($array) && is_array($array) {
    //loop
    foreach ($array as $values) {
        echo $values; 
    }
}

1voto

dev Punkte 2054

Verwenden Sie die Funktion is_array, wenn Sie ein Array an die foreach-Schleife übergeben wollen.

if (is_array($your_variable)) {
  foreach ($your_variable as $item) {
   //your code
}
}

1voto

Julian Punkte 3697

Wie wäre es mit dieser Lösung?

$type = gettype($your_iteratable);
$types = array(
    'array',
    'object'
);

if (in_array($type, $types)) {
    // foreach code comes here
}

1voto

Quentin Veron Punkte 2686

Wie wäre es, ein leeres Array als Fallback zu definieren, wenn get_value() leer ist?
Ich kann mir keinen kürzesten Weg vorstellen.

$values = get_values() ?: [];

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

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