Kerstel: foreach

Hi,

ich habe mir eine Rekursive Funktion gebaut:

function create_menu_tree ($user, $parentid = 0, $indent = 0) {
  $final_list = array ();
  $list = $this->get_menu_list ($user, $parentid);

// nun wird die liste abgearbeitet
  foreach ($list as $listitem) {
   $listitem["indent"] = $indent;
   $final_list[] = $listitem;
   $new_list = $this->create_menu_tree ($user, $listitem["id"], $indent + 1);

// wenn es Einträge für dieses Menü gibt
       if (count ($new_list) > 0) {
          $final_list = array_merge ($final_list, $new_list);
       }
    }
    return $final_list;
 }

Diese Funktioniert auf meinem Lokalen Server wunderbar (PHP 4.2). Bei meinem Provider (PHP 4.1) bekomme ich dann die Fehlermeldung:

Warning: Invalid argument supplied for foreach() in ...

Er mekert die Zeile an, in der foreach steht. Liegt das an den PHP-Versionen? Wie muss ich die sache dann ändern?

Gruß und Danke

Ralf

  1. Hallo Ralf!

    foreach ($list as $listitem)

    Diese Funktioniert auf meinem Lokalen Server wunderbar (PHP 4.2). Bei meinem Provider (PHP 4.1) bekomme ich dann die Fehlermeldung:

    Warning: Invalid argument supplied for foreach() in ...

    Mach doch mal
    foreach($list as $key => $listitem)
    vielleicht geht ja das ... ansonsten http://www.php.net/manual/en/control-structures.foreach.php

    MfG
    Götz

    1. Hi,

      Mach doch mal
      foreach($list as $key => $listitem)
      vielleicht geht ja das ... ansonsten http://www.php.net/manual/en/control-structures.foreach.php

      Ne funktioniert auch nicht, und das manual hilft da ja nicht wirklich weiter.

      Gruß

      Ralf

  2. Hallo,

    Warning: Invalid argument supplied for foreach() in ...

    das bedeutet, dass der Array, den foreach bekommt, gar keiner ist (in dem Fall $list) - vielleicht liefert die Funktion $this->get_menu_list keinen Array zurück (z.B. wg. Fehlerfall o.ä.) Eine Abfrage vor's foreach à la if (!is_array ($list)) return array (); dürfte es dann tun. Wenn dann aber eine leere Liste zurückgeliefert wird, dann macht get_menu_list Probleme.

    Grüße,

    Christian

    1. Hi

      das bedeutet, dass der Array, den foreach bekommt, gar keiner ist (in dem Fall $list) - vielleicht liefert die Funktion $this->get_menu_list keinen Array zurück (z.B. wg. Fehlerfall o.ä.) Eine Abfrage vor's foreach à la if (!is_array ($list)) return array (); dürfte es dann tun. Wenn dann aber eine leere Liste zurückgeliefert wird, dann macht get_menu_list Probleme.

      Komisch, das klappt (if (!is_array ($list)) return array ();) obwohl ich vorher mal $list ausgegeben habe, und es Array ausgegeben wurde.

      Keine Ahnung was da war, aufjedenfall klappts mit deiner Idee.

      Danke

      Ralf