SebastianJu: Fehlermeldung bei foreach...

Hallo,

ich habe ein Skript gebaut mit welchem einige Keywords in Tabellen eingetragen werden sollen. Dazu schreibe ich die Keywords in eine Tabelle und speichere dann die uid, also einen eindeutigen Integerwert als Referenz in einem Array. Im Skript lasse ich mir dieses Array anzeigen und mit

print_r($uid_keywords);

erhalte ich dann:

Array ( [0] => 14 [1] => 15 [2] => 16 )

Sind also drei Werte zum Testen.

Dieses Array benutze ich nun mit einer foreach-Schleife und lasse mir ein paar Werte noch ausgeben.

print_r($uid_keywords);  
foreach($uid_keywords as $keyword){  
  echo '<br/>key'.$keyword;  
  //--Anfang--  
  //--Code--  
  //--Ende--  
  print_r($uid_keywords);  
}

Ich gebe also einmal das Array for der Schleife aus dann in der Schleife als erstes die Nummer des Keywords und am Ende der Schleife noch einmal das Array falls es verändert wurde.

Als Log kommt dann so etwas heraus:

Array ( [0] => 14 [1] => 15 [2] => 16 )  
key14Array ( [0] => 14 [1] => 15 [2] => 16 )  
key15Array ( [0] => 14 [1] => 15 [2] => 16 )  
key16Array ( [0] => 14 [1] => 15 [2] => 16 )  
Warning: Invalid argument supplied for foreach() in H:\Webseiten\Parkingseiten\keyword_insert_script.php on line 29  
  
Warning: Invalid argument supplied for foreach() in H:\Webseiten\Parkingseiten\keyword_insert_script.php on line 29

Das heißt die Schleife läuft normal drei mal durch weil ja auch drei Werte im Array sind. Nur am Ende kommen zwei Fehlermeldungen. Und die verweisen auf eben jenes foreach

foreach($uid_keywords as $keyword){

Das befindet sich nämlich in der Zeile 29.

Allerdings verstehe ich die Fehlermeldung nicht. Normalerweise funktioniert eine foreach-Schleife doch so dass sie nur durch die Arrayelemente läuft die das benutzte Array enthält. Aber offenbar versucht die Schleife noch weiter Werte abzuholen. Ich sehe aber nicht wieso das so ist. Andere foreach-Schleifen funktionieren tadellos, nur diese eine nicht...

Die Variable $keyword umzubenennen hat auch keinen Effekt gehabt...

Weiß jemand wo das Problem liegt?

Grüße!
Sebastian

  1. Ok, ich habs jetzt doch gefunden... Die selbe Funktion wurde noch ein paar mal aufgerufen aber diesmal mit leerem Array. Eigentlich sollte die Funktion dann abbrechen. Warum da aber vor dem foreach kein leeres Array angezeigt wurde muss ich noch mal anschauen.

    Jedenfalls tritt das Problem nicht mehr auf wenn alle Arrays Inhalte haben...

    Grüße!
    Sebastian

    1. Hi SebastianJu!

      Ok, ich habs jetzt doch gefunden... Die selbe Funktion wurde noch ein paar mal aufgerufen aber diesmal mit leerem Array.

      Falsch, mit einem leeren Array würde keine Fehlermeldung ausgelöst.

      Initialisierst du die Arrays mit $array = array();?

      MfG H☼psel

      --
      "It's amazing I won. I was running against peace, prosperity, and incumbency."
      George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
      Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
      1. »» Ok, ich habs jetzt doch gefunden... Die selbe Funktion wurde noch ein paar mal aufgerufen aber diesmal mit leerem Array.
        Falsch, mit einem leeren Array würde keine Fehlermeldung ausgelöst.

        Initialisierst du die Arrays mit $array = array();?

        Nein. Und da lag wohl das Problem dass das Array auch nicht angezeigt wurde mit print_r. Weil es halt noch nicht bekannt war. Aber dann hätte ich eine entsprechende Fehlermeldung erwartet anstatt gar keine Anzeige. Ich hatte das Array nur mit array[0] usw gefüllt. Nur wenn es gar nicht gefüllt wird...

        Jetzt klappt jedenfalls alles wieder... :)

        Grüße!
        Sebastian

        1. Hi,

          Initialisierst du die Arrays mit $array = array();?

          Nein. Und da lag wohl das Problem dass das Array auch nicht angezeigt wurde mit print_r. Weil es halt noch nicht bekannt war. Aber dann hätte ich eine entsprechende Fehlermeldung erwartet anstatt gar keine Anzeige.

          Na die Fehlermeldung hast du doch bekommen - deshalb hast du doch hier gepostet, oder?

          Ich hatte das Array nur mit array[0] usw gefüllt. Nur wenn es gar nicht gefüllt wird...

          Dann ist es gar nicht vorhanden, logisch.
          Und das äussert sich dann u.a. beim Versuch, es mit foreach zu durchlaufen, mit einer entsprechenden Meldung.

          MfG ChrisB

          --
          Light travels faster than sound - that's why most people appear bright until you hear them speak.
        2. echo $begrüßung;

          [... nicht initialisierte Variable ...] Aber dann hätte ich eine entsprechende Fehlermeldung erwartet anstatt gar keine Anzeige.

          Die bekommst du, wenn du das error_reporting auf E_ALL stellst. Der lesende Zugriff auf eine nicht vorhandene Variable ist PHP nur eine Notice wert. Dieser Fehlermeldungstyp wird aber in der Grundkonfiguration nicht ausgegeben.

          echo "$verabschiedung $name";