Ankündigung

Einklappen
Keine Ankündigung bisher.

Schleife nur 1x durchlaufen

Einklappen

Neue Werbung 2019

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

  • Schleife nur 1x durchlaufen

    Hallo zusammen!

    Ich bin noch nicht so "bewandert" in PHP und habe daher (vermutlich eine Anfänger-)Frage:

    Wie kann man festlegen, dass eine Schleife nur 1x durchgelaufen wird?

    Es geht konkret um Überschriftsfelder, die mehrmals in einem vorkommen, aber nur 1x ausgegeben werden.
    Ich hab es zuerst mal "auf die harte Tour" mal mit break; vesucht, dann wird zwar die Schleife nur 1x durchgegangen und ich hab die Werte nur 1x aber es werden auch 5 Nullen angezeigt (es gäbe nämlich noch 5 weitere Durchläufe)

    Wie kann ich das (mit möglichst wenig Aufwand) ändern?

    Thx für jede Hilfe!


  • #2
    1. welche art von Schlaufe?
    2. verstehe die Frage nicht wirklich
    3. Kontroll-Strukturen
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      Es handelt sich um 2 verschachtelte foreach-Schleifen:
      PHP-Code:
      <?
      foreach(array_keys($aFields["M"]) as $bigKey)
      {
          echo "   <tr>\n";
          $next = "    <th></th>\n";
          foreach($aFields["M"][$bigKey] as $key=>$value)
          {
              echo $next;
              echo "    <th>$key</th>\n";
              $next += "    <th></th>\n";
          }
          echo "   </tr>\n";
              break;
      }
      ?>
      --> ich bekomm auf die Art immer Nuller (für jeden Nicht-Durchlauf eine)
      --> wie kann ich auf anderem Wege erreichen, dass diese Schleife nur 1x durchläuft?

      Kommentar


      • #4
        Ich verstehe deine Frage nicht. Wofür benutzt du eine Schleife, wenn die Anweisung nur ein Mal ausgeführt werden soll? Wie genau ist das Array aufgebaut? Wie soll die Ausgabe aussehen?

        Kommentar


        • #5
          Dass Array besteht aus einem weiteren Array, dass aus Werten besteht.
          Zuerst brauche ich die Überschriften -> deswegen nur 1x
          Danach ruf ich die Schleife nochmal auf, gebe aber dann nur die Werte aus.
          Ist vermutlich unnötig kompliziert...

          Die Ausgabe soll so aussehen:
          Position Feld 1 - Feld 2 - Feld 3
          1 Wert 1 - Wert 2 - Wert 3
          2 Wert 1 - Wert 2 - Wert 3
          3 Wert 1 - Wert 2 - Wert 3
          4 Wert 1 - Wert 2 - Wert 3

          Die Werte hole ich mir so:
          PHP-Code:
          <?
          // Daten ausgeben
          /* +++ $bigKey = 1.Schlüssel +++ */
          foreach(array_keys($aFields["M"]) as $bigKey)
          {
              /* +++ $key = 2.Schlüssel +++ */
              $zeile_a = "   <tr>\n";
              $zeile_e = "   </tr>\n";
              $pos = "    <th>Pos. $bigKey</th>\n";
              foreach($aFields["M"][$bigKey] as $key=>$value)
              {
                  /* +++ es werden nur ausgefüllte Felder angezeigt +++ */
                  if ($value != " ")
                  {
                      $next = "";
                      echo $zeile_a;
                      echo $pos;
                      echo $next;
                      echo "    <td>$value</td>\n";
                      $next += "    <th></th>\n";
                      $pos = "";
                      $zeile_a = "";
                  }
              }
              echo $zeile_e;
              break;
          }
          ?>
          Aber ich brauch ja auch die Überschriftsfelder ...
          Kann ich das auch da einbauen, ohne die Schleife vorher extra aufzurufen?
          Wenn ja, WIE?

          Kommentar


          • #6
            PHP-Code:
            <?php
            $i 
            0;
            foreach (
            $array as $value) {
              if (
            $i == 0) {
                
            // Spaltennamen ausgeben
                
            printf('<tr><td>%s</td></tr>'implode('</td><td>'array_keys($array)));
                
            $i 1;
              }
              
            // Spaltenwerte ausgeben
            }
            ?>
            Andererseits kenne ich die Spaltennamen meistens und schreib sie deshalb statisch über die Schleife.

            Kommentar


            • #7
              Danke!

              Die Spaltennamen können sich ändern, da das Script auf mehrere Formulare zufreift.

              Hm, an sowas hab ich auch schon gedacht, aber genau da liegt ja das Problem:
              Wie gebe ich da jetzt alle Spaltennamen aus?
              Bei jedem Durchlauf bekomm ich ja nur jeweils 1.

              Also wahrscheinlich lacht ihr ech schon halbtod darüber, wie man einerseits solche komplizerten Schleifen hinbekommt, aber nicht weiß wie man die Daten richtig ausgibt, aber ich muss trotzdem fragen:
              Wie bekomm ich die Spaltenüberschriften in eine Zeile?

              Kommentar


              • #8
                der Schippsel von Zergling zeigt es dir doch...
                Wie man Fragen richtig stellt

                Kommentar


                • #9
                  Habs grad erweitert um implode() + array_keys().

                  Kommentar


                  • #10
                    PHP-Code:
                    <?php

                    $aHeaders 
                    = array('Ziffer''Buchstabe''Roemisch');
                    $aData = array(
                        array(
                    1'a''I'),
                        array(
                    2'b''II'),
                        array(
                    3'c''III'),
                        array(
                    4'd''IV')
                    );

                    echo 
                    "<table>\n\t<tr>\n";

                    // print table headers
                    foreach ($aHeaders as $sHeader)
                        
                    printf ("\t\t<th>%s</th>\n"htmlentities((string)$sHeader));
                    echo 
                    "\t</tr>\n";

                    // print contents
                    foreach ($aData as $aRow) {
                        echo 
                    "\t<tr>\n";
                        foreach (
                    $aRow as $mValue)
                            
                    printf ("\t\t<td>%s</td>\n"htmlentities((string)$mValue));
                        echo 
                    "\t</tr>\n";
                    }
                    echo 
                    "</table>\n";
                    ?>
                    Ist natürlich eben eine Frage der Array-Struktur. Du könntest auch
                    $aHeaders und $aData wiederm in ein Array setzen oder eben, wie
                    hiervorgeschlagen, die Überschriften einfach quasi als erste Zeile in das
                    Datenarray aufnehmen.

                    Basti

                    Kommentar

                    Lädt...
                    X