Funktion in Schleife

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Funktion in Schleife

    Hallo zusammen,

    ich habe eine Frage zum Aufruf einer Methode (Funktion) in einer while-Schleife. Ich möchte, dass mir die Hauptstädte zu 6 Ländern angezeigt werden. Dazu habe ich zwei Objekte erschaffen - $EUHauptstaedte und $AMHauptstaedte. Diesen werden Werte zugewiesen, so dass jedes Land weiß, welches seine Hauptstadt ist.

    Nun möchte ich eine Liste erstellen, die die Länder und die Hauptstädte ausgibt. Leider wird immer nur die erste Hauptstadt angezeigt, danach folgen Blanks - nur DeutschlandBerlin wird gefunden, der Rest bleibt leer.

    Es scheint so, als ob die Methode nur ein Mal aufgerufen werden könne; anbei der Code - ich freue mich auf eure Verbesserungsvorschläge

    [COLOR=#4f76ac]<[/COLOR][COLOR=#823125]!DOCTYPE[/COLOR] [COLOR=#cf4820]html[/COLOR][COLOR=#4f76ac]>[/COLOR] [COLOR=#4f76ac]<[/COLOR][COLOR=#823125]html[/COLOR] [COLOR=#cf4820]lang[/COLOR][COLOR=#4f76ac]=[/COLOR][COLOR=#4f76ac]"en"[/COLOR][COLOR=#4f76ac]>[/COLOR] [COLOR=#4f76ac]<[/COLOR][COLOR=#823125]head[/COLOR][COLOR=#4f76ac]>[/COLOR] [COLOR=#4f76ac]<[/COLOR][COLOR=#823125]meta[/COLOR] [COLOR=#cf4820]charset[/COLOR][COLOR=#4f76ac]=[/COLOR][COLOR=#4f76ac]"utf-8"[/COLOR] [COLOR=#4f76ac]/>[/COLOR] [COLOR=#4f76ac]<[/COLOR][COLOR=#823125]title[/COLOR][COLOR=#4f76ac]></[/COLOR][COLOR=#823125]title[/COLOR][COLOR=#4f76ac]>[/COLOR] [COLOR=#4f76ac]</[/COLOR][COLOR=#823125]head[/COLOR][COLOR=#4f76ac]>[/COLOR] [COLOR=#4f76ac]<[/COLOR][COLOR=#823125]body[/COLOR][COLOR=#4f76ac]>[/COLOR] [COLOR=#222222]<?php[/COLOR] [COLOR=#9b5f9b]$Laender[/COLOR][COLOR=#1e7c70][[/COLOR][COLOR=#9b5f9b]1[/COLOR][COLOR=#1e7c70]]=[/COLOR][COLOR=#823125]"Deutschland"[/COLOR][COLOR=#1e7c70];[/COLOR] [COLOR=#9b5f9b]$Laender[/COLOR][COLOR=#1e7c70][[/COLOR][COLOR=#9b5f9b]2[/COLOR][COLOR=#1e7c70]]=[/COLOR][COLOR=#823125]"Frankreich"[/COLOR][COLOR=#1e7c70];[/COLOR] [COLOR=#9b5f9b]$Laender[/COLOR][COLOR=#1e7c70][[/COLOR][COLOR=#9b5f9b]3[/COLOR][COLOR=#1e7c70]]=[/COLOR][COLOR=#823125]"England"[/COLOR][COLOR=#1e7c70];[/COLOR] [COLOR=#9b5f9b]$Laender[/COLOR][COLOR=#1e7c70][[/COLOR][COLOR=#9b5f9b]4[/COLOR][COLOR=#1e7c70]]=[/COLOR][COLOR=#823125]"USA"[/COLOR][COLOR=#1e7c70];[/COLOR] [COLOR=#9b5f9b]$Laender[/COLOR][COLOR=#1e7c70][[/COLOR][COLOR=#9b5f9b]5[/COLOR][COLOR=#1e7c70]]=[/COLOR][COLOR=#823125]"Canada"[/COLOR][COLOR=#1e7c70];[/COLOR] [COLOR=#9b5f9b]$Laender[/COLOR][COLOR=#1e7c70][[/COLOR][COLOR=#9b5f9b]6[/COLOR][COLOR=#1e7c70]]=[/COLOR][COLOR=#823125]"Mexico"[/COLOR][COLOR=#1e7c70];[/COLOR] [COLOR=#4f76ac]echo[/COLOR] [COLOR=#823125]"<i>Schleife:<br></i>"[/COLOR][COLOR=#1e7c70];[/COLOR] [COLOR=#4f76ac]class[/COLOR] Hauptstaedte [COLOR=#1e7c70]{[/COLOR] [COLOR=#4f76ac]var[/COLOR] [COLOR=#9b5f9b]$Land[/COLOR][COLOR=#1e7c70];[/COLOR] [COLOR=#4f76ac]function[/COLOR] hinzufuegen[COLOR=#1e7c70]([/COLOR][COLOR=#9b5f9b]$Staat[/COLOR][COLOR=#1e7c70],[/COLOR][COLOR=#9b5f9b]$Hauptstadt[/COLOR][COLOR=#1e7c70])[/COLOR] [COLOR=#1e7c70]{[/COLOR] [COLOR=#9b5f9b]$this[/COLOR][COLOR=#1e7c70]->[/COLOR]Land[COLOR=#1e7c70][[/COLOR][COLOR=#9b5f9b]$Staat[/COLOR][COLOR=#1e7c70]]=[/COLOR][COLOR=#9b5f9b]$Hauptstadt[/COLOR][COLOR=#1e7c70];[/COLOR] [COLOR=#1e7c70]}[/COLOR] [COLOR=#4f76ac]function[/COLOR] suchen[COLOR=#1e7c70]([/COLOR][COLOR=#9b5f9b]$Land[/COLOR][COLOR=#1e7c70])[/COLOR] [COLOR=#1e7c70]{[/COLOR] [COLOR=#4f76ac]global[/COLOR] [COLOR=#9b5f9b]$Laender[/COLOR][COLOR=#1e7c70];[/COLOR] [COLOR=#4f76ac]while[/COLOR][COLOR=#1e7c70]([/COLOR][COLOR=#4f76ac]list[/COLOR][COLOR=#1e7c70]([/COLOR][COLOR=#9b5f9b]$key[/COLOR][COLOR=#1e7c70],[/COLOR][COLOR=#9b5f9b]$val[/COLOR][COLOR=#1e7c70])=[/COLOR][COLOR=#222222]each[/COLOR][COLOR=#1e7c70]([/COLOR][COLOR=#9b5f9b]$this[/COLOR][COLOR=#1e7c70]->[/COLOR]Land[COLOR=#1e7c70]))[/COLOR] [COLOR=#1e7c70]{[/COLOR] [COLOR=#4f76ac]if[/COLOR][COLOR=#1e7c70]([/COLOR][COLOR=#9b5f9b]$key[/COLOR][COLOR=#1e7c70]==[/COLOR][COLOR=#9b5f9b]$Land[/COLOR][COLOR=#1e7c70])[/COLOR] [COLOR=#1e7c70]{[/COLOR] [COLOR=#4f76ac]echo[/COLOR] [COLOR=#9b5f9b]$val[/COLOR][COLOR=#1e7c70];[/COLOR] [COLOR=#1e7c70]}[/COLOR] [COLOR=#1e7c70]}[/COLOR] [COLOR=#1e7c70]}[/COLOR] [COLOR=#1e7c70]}[/COLOR] [COLOR=#9b5f9b]$EUHauptstaedte[/COLOR] [COLOR=#1e7c70]=[/COLOR] [COLOR=#4f76ac]new[/COLOR] Hauptstaedte[COLOR=#1e7c70];[/COLOR] [COLOR=#9b5f9b]$EUHauptstaedte[/COLOR][COLOR=#1e7c70]->[/COLOR]hinzufuegen[COLOR=#1e7c70]([/COLOR][COLOR=#823125]"Deutschland"[/COLOR][COLOR=#1e7c70],[/COLOR][COLOR=#823125]"Berlin"[/COLOR][COLOR=#1e7c70]);[/COLOR] [COLOR=#9b5f9b]$EUHauptstaedte[/COLOR][COLOR=#1e7c70]->[/COLOR]hinzufuegen[COLOR=#1e7c70]([/COLOR][COLOR=#823125]"Frankfreich"[/COLOR][COLOR=#1e7c70],[/COLOR][COLOR=#823125]"Paris"[/COLOR][COLOR=#1e7c70]);[/COLOR] [COLOR=#9b5f9b]$EUHauptstaedte[/COLOR][COLOR=#1e7c70]->[/COLOR]hinzufuegen[COLOR=#1e7c70]([/COLOR][COLOR=#823125]"England"[/COLOR][COLOR=#1e7c70],[/COLOR][COLOR=#823125]"London"[/COLOR][COLOR=#1e7c70]);[/COLOR] [COLOR=#9b5f9b]$AMHauptstaedte[/COLOR] [COLOR=#1e7c70]=[/COLOR] [COLOR=#4f76ac]new[/COLOR] Hauptstaedte[COLOR=#1e7c70];[/COLOR] [COLOR=#9b5f9b]$AMHauptstaedte[/COLOR][COLOR=#1e7c70]->[/COLOR]hinzufuegen[COLOR=#1e7c70]([/COLOR][COLOR=#823125]"USA"[/COLOR][COLOR=#1e7c70],[/COLOR][COLOR=#823125]"Washington"[/COLOR][COLOR=#1e7c70]);[/COLOR] [COLOR=#9b5f9b]$AMHauptstaedte[/COLOR][COLOR=#1e7c70]->[/COLOR]hinzufuegen[COLOR=#1e7c70]([/COLOR][COLOR=#823125]"Canada"[/COLOR][COLOR=#1e7c70],[/COLOR][COLOR=#823125]"Ottawa"[/COLOR][COLOR=#1e7c70]);[/COLOR] [COLOR=#9b5f9b]$AMHauptstaedte[/COLOR][COLOR=#1e7c70]->[/COLOR]hinzufuegen[COLOR=#1e7c70]([/COLOR][COLOR=#823125]"Mexico"[/COLOR][COLOR=#1e7c70],[/COLOR][COLOR=#823125]"Mexico City"[/COLOR][COLOR=#1e7c70]);[/COLOR] [COLOR=#4f76ac]while[/COLOR][COLOR=#1e7c70]([/COLOR][COLOR=#4f76ac]list[/COLOR][COLOR=#1e7c70]([/COLOR][COLOR=#9b5f9b]$Kontinent[/COLOR][COLOR=#1e7c70])=[/COLOR][COLOR=#222222]each[/COLOR][COLOR=#1e7c70]([/COLOR][COLOR=#9b5f9b]$Laender[/COLOR][COLOR=#1e7c70]))[/COLOR] [COLOR=#1e7c70]{[/COLOR] [COLOR=#4f76ac]echo[/COLOR] [COLOR=#9b5f9b]$Laender[/COLOR][COLOR=#1e7c70][[/COLOR][COLOR=#9b5f9b]$Kontinent[/COLOR][COLOR=#1e7c70]];[/COLOR] [COLOR=#4f76ac]echo[/COLOR] [COLOR=#9b5f9b]$EUHauptstaedte[/COLOR][COLOR=#1e7c70]->[/COLOR]suchen[COLOR=#1e7c70]([/COLOR][COLOR=#9b5f9b]$Laender[/COLOR][COLOR=#1e7c70][[/COLOR][COLOR=#9b5f9b]$Kontinent[/COLOR][COLOR=#1e7c70]]);[/COLOR]
    [COLOR=#4f76ac] echo[/COLOR] [COLOR=#9b5f9b]$AMHauptstaedte[/COLOR][COLOR=#1e7c70]->[/COLOR]suchen[COLOR=#1e7c70]([/COLOR][COLOR=#9b5f9b]$Laender[/COLOR][COLOR=#1e7c70][[/COLOR][COLOR=#9b5f9b]$Kontinent[/COLOR][COLOR=#1e7c70]]);[/COLOR] [COLOR=#4f76ac]echo[/COLOR] [COLOR=#823125]"<br>"[/COLOR][COLOR=#1e7c70];[/COLOR] [COLOR=#1e7c70]}[/COLOR] [COLOR=#222222]?>[/COLOR] [COLOR=#4f76ac]</[/COLOR][COLOR=#823125]body[/COLOR][COLOR=#4f76ac]>[/COLOR] [COLOR=#4f76ac]</[/COLOR][COLOR=#823125]html[/COLOR][COLOR=#4f76ac]>[/COLOR]

  • #2
    Bitte erst mal den Code so formatieren, dass man ihn lesen kann.

    Danke
    Peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      zweiter Versuch



      <!DOCTYPE html>
      <html lang="en">
      <head>
      <meta charset="utf-8" />
      <title></title>
      </head>
      <body>
      <?php

      $Laender[1]="Deutschland";
      $Laender[2]="Frankreich";
      $Laender[3]="England";
      $Laender[4]="USA";
      $Laender[5]="Canada";
      $Laender[6]="Mexico";

      echo "<i>Schleife:<br></i>";
      class Hauptstaedte
      {
      var $Land;
      function hinzufuegen($Staat,$Hauptstadt)
      {
      $this->Land[$Staat]=$Hauptstadt;
      }
      function suchen($Land)
      { global $Laender;
      while(list($key,$val)=each($this->Land))
      {
      if($key==$Land)
      {
      echo $val;
      }
      }
      }
      }

      $EUHauptstaedte = new Hauptstaedte;
      $EUHauptstaedte->hinzufuegen("Deutschland","Berlin");
      $EUHauptstaedte->hinzufuegen("Frankfreich","Paris");
      $EUHauptstaedte->hinzufuegen("England","London");

      $AMHauptstaedte = new Hauptstaedte;
      $AMHauptstaedte->hinzufuegen("USA","Washington");
      $AMHauptstaedte->hinzufuegen("Canada","Ottawa");
      $AMHauptstaedte->hinzufuegen("Mexico","Mexico City");

      while(list($Kontinent)=each($Laender))
      {
      echo $Laender[$Kontinent];
      echo $EUHauptstaedte->suchen($Laender[$Kontinent]);
      echo $AMHauptstaedte->suchen($Laender[$Kontinent]);
      echo "<br>";
      }
      ?>
      </body>
      </html>

      Kommentar


      • #4
        http://php.net/manual/en/function.each.php:
        After each() has executed, the array cursor will be left on the next element of the array, or past the last element if it hits the end of the array. You have to use reset() if you want to traverse the array again using each.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Funzt nit

          [..]

          [COLOR=#222222]reset($Laender);
          while(list($Kontinent)=each($Laender))
          {
          echo $Laender[$Kontinent];
          echo $EUHauptstaedte->suchen($Laender[$Kontinent]);
          echo $AMHauptstaedte->suchen($Laender[$Kontinent]);
          echo "<br>";
          }[/COLOR][COLOR=#1e7c70]

          [..]
          [/COLOR]

          Kommentar


          • #6
            Hi marcydarcy2,
            warum so kompliziert? Du hast doch schon ein globales Array und legst in der Klasse
            nochmal ein Array an, und willst die beiden irgendwie zusammenfriemeln.

            Ich würde das globale Array assoziativ anlegen . . .
            PHP-Code:
            $Laender["Deutschland"]='';
            $Laender["Frankreich"]='';
            $Laender["England"]='';
            $Laender["USA"]='';
            $Laender["Canada"]='';
            $Laender["Mexico"]=''
            . . . und dieses Array in der Klassenmethode als "Call by Reference" übergeben, damit das Array direkt bearbeitet wird.
            PHP-Code:
            class CHauptstadt{
             
            /*
             * Array als "Call by Reference" übergeben (siehe Kaufmanns-Und)
             */
             
            public function add_town(&$laender$land$stadt){
              
            $laender[$land] = $stadt;
             }
             
            /*
             * Alle vorhandenen Zuordnungen zeigen
             */
             
            public function show_all_towns($laender){
              foreach(
            $laender as $land => $stadt){
               if(
            strlen($stadt)>0){
                echo 
            '<b>Land:</b> '.$land.' <b>Hauptstadt:</b> '.$stadt.'<br>';
               }
              }
             }
             
            /*
             * Nach einer Zuordnung suchen
             */
             
            public function search_town($laender$land){
              if(
            strlen($laender[$land]) == 0){
               echo 
            'Zum gesuchten Land<b> '.$land.'</b> existiert kein Eintrag.<br>';
              }else{
                    echo 
            '<b>Gesuchtes Land:</b> '.$land.' <b>Hauptstadt:</b> '.$laender[$land].'<br>';
                    }
             }
            }
            $hs = new CHauptstadt;
            $hs->add_town($Laender'Deutschland','Berlin');
            $hs->add_town($Laender'USA','Washington DC');
            $hs->show_all_towns($Laender);
            $hs->search_town($Laender'Mexico');
            $hs->search_town($Laender'Deutschland'); 
            Gruß
            Günni

            Kommentar


            • #7
              ...

              Hallo Günni,

              klasse, vielen Dank! Tolle Lösung! Ich verstehe es zwar noch nicht ganz, werde es aber studieren. Die PHP Syntax ist schon echt gewöhnungsbedürftig, aber so ist das halt bei einer Sprache, die man neu lernt.

              Hab vielen Dank!

              Vielen Dank auch an wahsaga. Der Tipp hat leider bei mir nicht funktioniert, aber laut Link war es das richtige Vorgehen. Da fehlt noch eine Kleinigkeit, aber vielleicht finde ich das noch heraus.

              Ihr habt ein sehr sympathisches Forum hier!

              Kommentar

              Lädt...
              X