Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Problem mit foreach-Schleife

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Problem mit foreach-Schleife

    Hallo,

    ich bin nicht nur neu hier im Forum, sondern auch ein totaler PHP-Neuling,
    der gleich mal um Hilfe bittet. Die Hilfeseiten hier im Forum habe ich schon durchgelesen.

    Ich mache gerade einige Übungen mit Schleifen. Den Aufbau der for-Schleife verstehe ich schon, aber ich habe ein Problem, das ganze Konstrukt in eine foreach-Schleife umzuwandeln.

    Hier das funktionierende Beispiel mit meiner for-Schleife:

    PHP-Code:
    <?php
    $Buch
    [] = "Kapitel1";
    $Buch[] = "Kapitel2";
    $Buch[] = "Kapitel3";

    for (
    $n=0$n 3$n++) {
         echo 
    $Buch[$n], "<br>";
    }
    ?>
    Ich bekomme wie erwartet das hier ausgegeben:
    Kapitel1
    Kapitel2
    Kapitel3

    Jetzt würde ich meine "Kapitel" aus dem Buchbeispiel gerne mit dem foreach ausgeben und habe dazu geschrieben:

    PHP-Code:
    <?php
    $Buch
    [] = "Kapitel1";
    $Buch[] = "Kapitel2";
    $Buch[] = "Kapitel3";

    foreach (
    $Buch as $neu) {
               echo 
    $neu"<br>";
    }
    ?>
    Ich bekomme das hier ausgegeben:
    Kapitel1
    Kapitel2
    Kapitel3
    Kapitel1
    Kapitel2
    Kapitel3

    Zwei Dinge sind mir jetzt völlig unklar:

    1. Weshalb meine Buchkapitel doppelt ausgegeben werden.
    2. Wozu die zweite Variable ($neu) genau dient?

    Bisher dachte ich, ich brauche Sie, falls ich irgendwann mal der Variablen $Buch einen neuen Wert (z.B. ein "Kapitel4") zuweisen möchte.


    Hätte jemanden einen Tipp für mich?

    LG
    caipiranha
    [SIZE="1"][FONT="Arial"]Mit kleinen Schritten vorwärts. :) [/FONT][/SIZE]

  • #2
    Zitat von caipiranha Beitrag anzeigen
    PHP-Code:
    <?php
    $Buch
    [] = "Kapitel1";
    $Buch[] = "Kapitel2";
    $Buch[] = "Kapitel3";

    foreach (
    $Buch as $neu) {
               echo 
    $neu"<br>";
    }
    ?>
    Ich bekomme das hier ausgegeben:
    Kapitel1
    Kapitel2
    Kapitel3
    Kapitel1
    Kapitel2
    Kapitel3
    Scheint mir komisch, normal sollte das auch das obere Ergebnis ausgeben, habs gerade sogar getestet weil ichs nicht glauben konnte und es wurde mir auch das erwartet Ergebnis ausgegeben.

    Bist du sicher das du den Code nicht in einer anderen Schleife noch drinn hast?

    2. Wozu die zweite Variable ($neu) genau dient?
    $neu ist einfach der Wert zu dem gerade durchlaufenden Schlüssel im Array

    foreach ( $Buch as $key => $value )

    array(3) {
    [0] => "Kapitel1"
    [1] => "Kapitel1"
    [2] => "Kapitel1"
    }

    Kommentar


    • #3
      Hast du beide Codes hintereinander in einer Datei stehen und setzt $Buch nicht zurück?
      Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

      Kommentar


      • #4
        Hallo kn0wledge,
        hallo lstegelitz.

        erst einmal vielen Dank für die Erklärung mit dem neuen Wert der zweiten Variablen.

        Ja lstegelitz, du hast Recht. Ich habe meine Übungsaufgaben untereinander in einer Datei stehen. Das sieht so aus:

        PHP-Code:
        <b>foreach-Schleife</b>
        <p>
        <b>Test 1</b>
        <p>

        <?php
        $Buch
        [] = "Kapitel1-X";
        $Buch[] = "Kapitel2-X";
        $Buch[] = "Kapitel3-X";

        foreach (
        $Buch as $neu) {
                echo 
        $neu"<br>";
        }
        ?>

        <p>
        <b>Test 2</b>
        <p>

        <?php
        $Buch
        [] = "Kapitel1";
        $Buch[] = "Kapitel2";
        $Buch[] = "Kapitel3";

        foreach (
        $Buch as $neu) {
                 echo 
        $neu"<br>";
        }
        ?>
        Ausgabe:
        Kapitel1-X (aus "Test1")
        Kapitel2-X (aus "Test1")
        Kapitel3-X (aus "Test1")
        Kapitel1 (aus "Test2")
        Kapitel2 (aus "Test2")
        Kapitel3 (aus "Test2")

        Um auszuprobieren ob wirklich die erste Schleife nochmal ausgegeben wird, habe ich beim ersten Versuch zur Ansicht mal ein -X drangehängt. Und siehe da, ihr habt recht. Die ersten Werte werden auch nochmal angezeigt.

        Eigentlich dachte ich, das kann nicht passieren, da ich ja jedes Konstrukt sauber mit Fragezeichen und spitzer Klammer ?> beendet habe?
        [SIZE="1"][FONT="Arial"]Mit kleinen Schritten vorwärts. :) [/FONT][/SIZE]

        Kommentar


        • #5
          Eigentlich dachte ich, das kann nicht passieren, da ich ja jedes Konstrukt sauber mit Fragezeichen und spitzer Klammer ?> beendet habe?
          ?> veranlasst nur den Interpreter, alles außerhalb der php-Tags zu ignorieren und direkt auszugeben. Die Variable bleibt weiterhin bis zum Ende der Datei gültig.

          Kommentar


          • #6
            ... veranlasst nur den Interpreter, alles außerhalb der php-Tags zu ignorieren und direkt auszugeben. Die Variable bleibt weiterhin bis zum Ende der Datei gültig.
            Huhu Seldon,

            das wusste ich natürlich nicht. Aber irgendwie freut es mich, weil ich mir vorstellen kann, dass wenn ich später mal einen richtigen PHP-Text (außerhalb meiner Übungen) erstelle, das von Vorteil sein kann, um sich doppelte Arbeit zu sparen.

            Du hast mich jetzt auf ganz neue Ideen gebracht. Wenn das richtig ist, was du sagst, wäre es ja möglich, sich den PHP-Quelltext "aufzuteilen". So wie hier:

            PHP-Code:
            <?php
            $Variable
            [] = "Text";
            ?>
            unterbrochen durch einen beliebigen HTML-Text

            PHP-Code:
            <?php
            foreach ($Variable as $Wert) {
                    echo 
            $Wert"<br>";
            }
            ?>
            Das beste ist sogar, dass es bei mir funktioniert.

            Das freut mich jetzt wirklich, dass ihr so nett zu mir seid.

            Dankeschön!
            [SIZE="1"][FONT="Arial"]Mit kleinen Schritten vorwärts. :) [/FONT][/SIZE]

            Kommentar


            • #7
              Lösung gefunden

              Um das Thema zu vervollständigen, schreibe ich einfach mal rein, wie ich das Problem dann doch gelöst habe:

              Ich habe

              PHP-Code:
              unset($Buch); 
              vor den Echo-Befehl gesetzt und jetzt funktioniert es.
              [SIZE="1"][FONT="Arial"]Mit kleinen Schritten vorwärts. :) [/FONT][/SIZE]

              Kommentar


              • #8
                Gewöhn Dir einfach die Denke an, dass PHP HTML beinhaltet, nicht umgekehrt. Das ist nämlich faktisch so. HTML gibt es zum Ausführungszeitpunkt von PHP noch gar nicht.
                [COLOR="#F5F5FF"]--[/COLOR]
                [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                [COLOR="#F5F5FF"]
                --[/COLOR]

                Kommentar

                Lädt...
                X