cygnus: for-Schleife einbinden

Hallo :)

Ich möchte in die Zellen, die derzeit $a enthalten, den Wert der for-Schleife $i einfügen. Meine bisherigen Versuche schlugen alle fehl.
Entweder wurde nichts angezeigt oder in jeder betreffenden Zelle stand die Zahl 10. Eigentlich sind es 404 zu zählende Zellen, ich habe die Anzahl zum Testen beschränkt.
Wie kann ich die for-schleife dazu bringen, in jeder betreffenden Zelle zu zählen?

Die Include-Datei enthält nur den mit foreach ausgegebenen array.
Hier der Code:
<?php

for ($i=1; $i<=10; $i++)
{
echo($i);
}

include ("inc/404.inc.php");

foreach($verse as $tabelle)
{list($a, $b, $c, $d, $e, $f, $g, $h, $i, $k, $ko) = $tabelle;

echo "\n\n<tr><td class=a>" , $a , "</td>\n<td class=b>";
echo $b , "</td>\n<td class=c>";
echo $c , "</td>\n<td class=d>";
echo $d , "</td>\n<td class=e>";
echo $e , "</td>\n<td class=f>";
echo $f , "</td>\n<td class=g>";
echo $g , "</td>\n<td class=h>";
echo $h , "</td>\n<td class=i>";
echo $i , "</td></tr>";
echo "\n<tr><td class=k>" , $k , "</td><td class=ko colspan=8>" , $ko , "</td></tr>";
}

?>

mfg
cygnus

--
Die Sache mit der Angel und dem  ><o(((°>  hat immer einen Haken ...
  1. Hallo,

    Ich möchte in die Zellen, die derzeit $a enthalten, den Wert der for-Schleife $i einfügen.

    $i ist keine for-Schleife. $i mag eine Variable sein, die in einer for-Schleife verwendet wird.

    Die Include-Datei enthält nur den mit foreach ausgegebenen array.

    keine gute Idee, diese Arbeit solltest Du Deinen potentiellen Helfern nicht aufbürden.

    Hier der Code:

    Miserabler Code, da unkommentiert. Wo liegt nun Dein Problem. Welche Ausgabe erwartest Du, welche erhältst Du? Wo ist die Abweichung?

    // Gibt die Zahlen von 1 bis 10 aus.

    for ($i=1; $i<=10; $i++)
    {
    echo($i);
    }

    // $i hat nun den Wert 11.

    include ("inc/404.inc.php");

    Du scheinst ein zweidimensionales Array definiert zu haben

    foreach($verse as $tabelle)
    {

    // Warum nicht nochmal eine foreach-Schleife?
    // Die Bezeichnungen für die Klassen lassen sich hochzählen :-)

    // Hier wird der Variablen $i ein neuer Wert zugewiesen.
    // $i muss nicht mehr den Wert 11 haben :-)

    list($a, $b, $c, $d, $e, $f, $g, $h, $i, $k, $ko) = $tabelle;

    echo "\n\n<tr><td class=a>" , $a , "</td>\n<td class=b>";
    echo $b , "</td>\n<td class=c>";
    echo $c , "</td>\n<td class=d>";
    echo $d , "</td>\n<td class=e>";
    echo $e , "</td>\n<td class=f>";
    echo $f , "</td>\n<td class=g>";
    echo $g , "</td>\n<td class=h>";
    echo $h , "</td>\n<td class=i>";

    // Hier wird der Wert, den Du über list() zugewiesen hast, ausgegeben,
    // nicht die 11.

    echo $i , "</td></tr>";
    echo "\n<tr><td class=k>" , $k , "</td><td class=ko colspan=8>" , $ko , "</td></tr>";
    }

    Du bist doch schon länger hier. Bitte formuliere Deine Frage so, dass man sie nachvollziehen kann.

    Anmerkung: Es ist übrigens eine hervorragende Idee, die Werte von HTML-Attributen in Anführungszeichen zu setzen.

    Freundliche Grüße

    Vinzenz

    1. Hallo Vinzenz,

      Die Include-Datei enthält nur den mit foreach ausgegebenen array.

      keine gute Idee, diese Arbeit solltest Du Deinen potentiellen Helfern nicht aufbürden.

      Ich habe die Datei ausgelagert, weil sie über 3500 Zeilen lang ist
      und ich eventuell noch von anderer Stelle darauf zugreifen möchte.
      Welche Probleme ergeben sich daraus? Oder verstehe ich deine Anmerkung falsch?

      Du bist doch schon länger hier. Bitte formuliere Deine Frage so, dass man sie nachvollziehen kann.

      Ich beschäftige mich heute den 4. Tag mit PHP, so dass mir immer noch und wohl noch etwas länger einige Vokabeln zum Formulieren fehlen.
      Vielen Dank für die Antwort.

      mfg
      cygnus

      --
      Die Sache mit der Angel und dem  ><o(((°>  hat immer einen Haken ...
    2. Hallo :)

      // Warum nicht nochmal eine foreach-Schleife?
      // Die Bezeichnungen für die Klassen lassen sich hochzählen :-)

      Jede erneute foreach schleife löst leider Parser error aus.

      Miserabler Code, da unkommentiert. Wo liegt nun Dein Problem. Welche Ausgabe erwartest Du, welche erhältst Du? Wo ist die Abweichung?

      Ich möchte gern, dass in der Zelle mit dem Inhalt von $a (eigentlich leer) eine fortlaufende Zählung erscheint, beim ersten Durchlauf die 1, beim zweiten Durchlauf die 2 usw. bis hinauf zu 404.

      Bisher habe ich es nur geschafft, den Endwert der forSchleife als $a auszugeben, d. h. es steht immer der Höchstwert in jeder Zelle, die den Inhalt von $a ausgibt..

      Manchmal habe ich Sehnsucht nach der Steinzeit.
      Da waren alle möglichen Argumente irgendwie überschaubarer.
      Ich werde die Zahlen wohl per Hand nachtragen, das geht schneller :)

      mfg
      cygnus

      --
      Die Sache mit der Angel und dem  ><o(((°>  hat immer einen Haken ...
      1. Hi,

        Jede erneute foreach schleife löst leider Parser error aus.

        Nein, die loest nicht die foreach-Schleife aus, sondern syntaktische Fehler in deinem Code.

        Ich möchte gern, dass in der Zelle mit dem Inhalt von $a (eigentlich leer) eine fortlaufende Zählung erscheint, beim ersten Durchlauf die 1, beim zweiten Durchlauf die 2 usw. bis hinauf zu 404.

        Und warum zaehlst du dann dir Durchlaeufe nicht einfach mit?

        Bisher habe ich es nur geschafft, den Endwert der forSchleife als $a auszugeben

        Natuerlich, wenn eine for-Schleife vollkommen unabhaengig von einer nachfolgenden foreach-Schleife laeuft, was willst du denn dann anderes erwarten?

        MfG ChrisB

        --
        „This is the author's opinion, not necessarily that of Starbucks.“
        1. Hallo :)

          Nein, die loest nicht die foreach-Schleife aus, sondern syntaktische Fehler in deinem Code.

          Ja, das ist mir klar.

          Und warum zaehlst du dann dir Durchlaeufe nicht einfach mit?

          Weil ich noch nicht herausgefunden habe, wie das geht.

          Natuerlich, wenn eine for-Schleife vollkommen unabhaengig von einer nachfolgenden foreach-Schleife laeuft, was willst du denn dann anderes erwarten?

          Ich habe die for Schleife vor den restlichen Code gestellt, um zu zeigen, welches Mittel ich einsetzen möchte. Wo die genau hingehört, hatte ich auch noch nicht herausgefunden.
          Und eigentlich weiss ich es auch jetzt noch nicht.

          mfg
          cygnus

          --
          Die Sache mit der Angel und dem  ><o(((°>  hat immer einen Haken ...
          1. Hi,

            Und warum zaehlst du dann dir Durchlaeufe nicht einfach mit?

            Weil ich noch nicht herausgefunden habe, wie das geht.

            Dann finde heraus, wie man a) eine Variable mit einem (Integer) Startwert initialisiert, und b) mit welchen Operatoren man ihren Wert anschliessend um eins hochzaehlen kann.

            MfG ChrisB

            --
            „This is the author's opinion, not necessarily that of Starbucks.“
            1. Hallo :)

              Dann finde heraus, wie man a) eine Variable mit einem (Integer) Startwert initialisiert, und b) mit welchen Operatoren man ihren Wert anschliessend um eins hochzaehlen kann.

              Ich hatte das ausprobiert.

              $start = 0;
              for($z = 1; $z <= 202; $z++)
              {
              $a = $z;
              echo "$a<br>";
              }

              Das zählt natürlich schön.

              Ein weiterer Versuch war so:

              foreach($verse as $tabelle)
              {list($a, $b, $c, $d, $e, $f, $g, $h, $i, $k, $ko) = $tabelle;
               $start = 0;
              for($z = 1; $z <= 202; $z++)
              {
              $a = $z;
              }
              echo "\n\n<tr><td class='a'>" , $a , "</td>\n<td class='b'>";

              Jetzt gibt jede betroffene Zelle natürlich 202 aus.

              Ich weiss nicht, wie ich den Zähler so integriere, dass die 202 Durchläufe von $a gezälht werden.
              Ich weiss nicht, wie und wo ich in diesem Fall foreach einsetzen kann.

              Nicht dass ich die Antworten von Vinzenz nicht annehmen will ...
              Ich habe auch ausprobiert, das umzusetzen, was aber zu einem Chaos führte.

              mfg
              cygnus

              --
              Die Sache mit der Angel und dem  ><o(((°>  hat immer einen Haken ...
              1. Hi,

                Ich hatte das ausprobiert.

                Warum willst du denn partout zwei Schleifen verschachteln, wenn du doch zur Ausgabe deines Arrays nur eine brauchst?

                Ich weiss nicht, wie ich den Zähler so integriere, dass die 202 Durchläufe von $a gezälht werden.
                Ich weiss nicht, wie und wo ich in diesem Fall foreach einsetzen kann.

                Setze foreach "ganz normal" ein - zum Durchlaufen deines Arrays mit den Daten.

                Zaehle beim Abarbeiten dieser Schleife mit - ohne zusaetzliche Schleifen; die braucht es nicht, um den Wert einer Zaehlvariable jedes Mal um eins zu erhoehen.

                MfG ChrisB

                --
                „This is the author's opinion, not necessarily that of Starbucks.“
                1. Hallo :)

                  Warum willst du denn partout zwei Schleifen verschachteln, wenn du doch zur Ausgabe deines Arrays nur eine brauchst?

                  Das will ich partout nicht, es ist mir hier empfohlen worden, und da ich nicht weiß, wie ich es überhaupt machen soll, habe ich es damit eben auch versucht.

                  Zaehle beim Abarbeiten dieser Schleife mit - ohne zusaetzliche Schleifen; die braucht es nicht, um den Wert einer Zaehlvariable jedes Mal um eins zu erhoehen.

                  Ich probiere seit gestern abend, heute den halben Vormittag, fast den ganzen Nachmittag und jetzt wieder alles mögliche aus, ohne Erfolg.
                  Ich habe leider auch keine PHP Einführung gefunden, die das etwas genauer beschreibt.

                  Wer weiss, wie lange ich noch lebe, und um die Zellen per Hand zu numerieren, benötige ich nur eine halbe Stunde.

                  Ich spiele jetzt eine Runde Solitär zur Entsprannung.

                  mfg
                  cygnus

                  --
                  Die Sache mit der Angel und dem  ><o(((°>  hat immer einen Haken ...
                  1. Hi,

                    Ich probiere seit gestern abend, heute den halben Vormittag, fast den ganzen Nachmittag und jetzt wieder alles mögliche aus, ohne Erfolg.
                    Ich habe leider auch keine PHP Einführung gefunden, die das etwas genauer beschreibt.

                    Was gibt es denn daran noch genauer zu beschreiben?
                    Das ist auch nichts besonders PHP-spezifisches, sondern ein einfaches Problem, ueber das man nur mal kurz logisch nachdenken muss.

                    Zaehlervariable vor Schleife initialisieren,
                    innerhalb Schleife Zaehlerstand ausgeben und um eins erhoehen.

                    Wert der Initialisierung und Reihenfolge von Ausgabe/Erhoehung in der Schleife kann man variieren, je nachdem wie es fuer den aktuellen Anwendungsfall guenstiger ist.

                    MfG ChrisB

                    --
                    „This is the author's opinion, not necessarily that of Starbucks.“
                    1. Hallo :)

                      Zaehlervariable vor Schleife initialisieren,
                      innerhalb Schleife Zaehlerstand ausgeben und um eins erhoehen.

                      Ich habe es leider nicht geschaft, dass dann für die §a einzusetzen.
                      Na ja - inzwischen habe ich die Zahlen per Hand nachgesetzt.
                      Vielleicht komme ich ja später mal hinter das Geheimnis.

                      Erstmal Danke für die (leider vergebliche) Mühe um mein Seelenheil..

                      mfg
                      cygnus

                      --
                      Die Sache mit der Angel und dem  ><o(((°>  hat immer einen Haken ...
                  2. Hallo,

                    Warum willst du denn partout zwei Schleifen verschachteln, wenn du doch zur Ausgabe deines Arrays nur eine brauchst?

                    Das will ich partout nicht, es ist mir hier empfohlen worden,

                    ja hab' ich. Weil ich Deinen Ansatz so verstanden habe, dass es nützlich sein könnte. Ich habe die Frage gestellt, wie der Inhalt Deiner Datei aussieht, aber keine Antwort erhalten. Ich weiß nun, dass es 3.500 Zeilen gibt - und Du irgendwo bis 404 kommen willst. Der Zusammenhang ist mir leider schleierhaft.

                    und da ich nicht weiß, wie ich es überhaupt machen soll, habe ich es damit eben auch versucht.

                    Wer weiss, wie lange ich noch lebe, und um die Zellen per Hand zu numerieren, benötige ich nur eine halbe Stunde.

                    Es geht nicht um die Eingabe dieser einen Datei. Du hast hier vermutlich ein grundlegendes Problem der Programmiertechnik vor Dir.

                    Ich gehe weiterhin davon aus, dass Deine Daten in einem zweidimensionalen Array vorliegen. Dabei enthält jede "Zeile" gleich viele Zellen. Um das Prinzip zu verstehen, genügt ein Beispiel mit zwei Zeilen, die jeweils drei Zellen haben.

                    // Unsere Daten liegen in einem zweidimensionalen Array vor  
                    $data = array(  
                        array(11, 12, 13),  
                        array(21, 22, 23)  
                    );  
                      
                    // Gleichbedeutend zu:  
                      
                    /*  
                    $data[0][0] = 11;  
                    $data[0][1] = 12;  
                    $data[0][2] = 13;  
                    $data[1][0] = 21;  
                    $data[1][1] = 22;  
                    $data[1][2] = 23;  
                    */
                    

                    Möchtest Du diese in einer HTML-Tabelle zu zwei (sprich erste Dimension) Zeilen und drei (sprich zweite Dimension) ausgeben, und die einzelnen Zellen durchnummerieren, d.h. mit einer Ausgabe wie

                    Jede Zelle enthält:
                    Wert: Wert aus Array
                    Zellennummer: Durchnumerierung jeder einzelnen Zelle

                    so geht man wie folgt vor

                    Initialisiere Zellennumerierung mit 0
                    Beginne HTML-Tabelle
                    Für jede Zeile
                        Beginne HTML-Zeile
                        Für jede Zelle in der Zeile
                            Beginne HTML-Zelle
                            Schreibe aktuellen Wert
                            Schreibe HTML-Zeilenumbruch ;-)
                            Schreibe Wert:, Zellennummer
                            Erhöhe Zellennummer
                            Schließe HTML-Zelle ab
                        Ende "Für jede Zelle"
                        Schließe HTML-Zeile ab
                    Ende "Für jede Zeile"
                    Schließe HTML-Tabelle ab

                    Ist das verständlich? Es führt zu einer Tabelle

                    Wert: 11    Wert: 12    Wert: 13
                    Zelle: 0    Zelle: 2    Zelle: 3

                    Wert: 21    Wert: 22    Wert: 23
                    Zelle: 4    Zelle: 5    Zelle: 6

                    Sollte es so aussehen, dann gehe wie von mir skizziert vor. Falls Du das Vorgehen nicht verstehst, frage konkret nach. Wenn es Dir Schwierigkeiten bereitet, meinen Pseudocode in PHP umzusetzen, frage konkret nach.

                    Falls es nicht so aussehen soll, falls die Ausgangsdaten ganz anders strukturiert sind, dann erkläre bitte an einem genauso kleinen Beispiel, wie die Ausgangsdaten aussehen und wie das Ergebnis aussehen soll. Und ganz genau das gehört in eine Fragestellung, mit der man als potentieller Helfer etwas anfangen kann.

                    *Du* weißt, wie Deine Daten aussehen - *ich* bin mir nicht sicher, ob ich Dich richtig verstanden habe.
                    *Du* weißt, wie Dein Wunschergebnis aussieht - *ich* kann es mir immer noch nicht vorstellen.

                    Freundliche Grüße

                    Vinzenz

                    1. Hallo :)

                      Ich gehe weiterhin davon aus, dass Deine Daten in einem zweidimensionalen Array vorliegen. Dabei enthält jede "Zeile" gleich viele Zellen. Um das Prinzip zu verstehen, genügt ein Beispiel mit zwei Zeilen, die jeweils drei Zellen haben.

                      Ja die Annahme ist richtig.
                       Pro array sind es 11 Werte, die aber in zwei Reihen ausgegeben werden.

                      [code lang=php]// Unsere Daten liegen in einem zweidimensionalen Array vor
                      $data = array(
                          array(11, 12, 13),
                          array(21, 22, 23)

                      Es kommt eine Tabelle dabei heraus, die für diese beiden  arrays so aussieht,
                      Zelle 11 bekommt die Variable $a zugwiesen usw.

                      <tr><td>[Zelle 11 $a] </td><td> [Zelle 12 $b]</td></tr>
                      <tr><td>[Zelle 13 $c]</td></tr>
                      <tr><td>[Zelle 21 $a] </td><td> [Zelle 22 $b]</td></tr>
                      <tr><td>[Zelle 23 $c]</td></tr>

                      In Zelle $b steht ein Text, in Zelle $c der Kommentar dazu.
                      Und in Zelle $a soll eine fortlaufende Nr. stehen, die Zählung soll mit 1 beginnen und mit 404 enden, weil es insgesamt 404 Arrays sind.

                      Möchtest Du diese in einer HTML-Tabelle zu zwei (sprich erste Dimension) Zeilen und drei (sprich zweite Dimension) ausgeben, und die einzelnen Zellen durchnummerieren,

                      Nein, das nicht. Ich werde mir das Beispiel aber kopieren und später damit üben.

                      Vielleicht passt die letzte Antwort von ChrisB zu meinem Ansinnen, ich werde es mal ausprobieren.
                      Danke.

                      mfg
                      cygnus

                      --
                      Die Sache mit der Angel und dem  ><o(((°>  hat immer einen Haken ...
                      1. Hallo,

                        Ich gehe weiterhin davon aus, dass Deine Daten in einem zweidimensionalen Array vorliegen. Dabei enthält jede "Zeile" gleich viele Zellen. Um das Prinzip zu verstehen, genügt ein Beispiel mit zwei Zeilen, die jeweils drei Zellen haben.

                        Ja die Annahme ist richtig.
                        Pro array sind es 11 Werte, die aber in zwei Reihen ausgegeben werden.

                        Aus 11 Werten plus die Zeilennumerierung werden zwei Zeilen, d.h. aus einem (Zeilen-)array wird

                        Zähler  1. El  2. El  3. El  4. El   5. El
                        6. El   7. El  8. El  9. El  10. El  11. El

                        Zähler  1. El  2. El  3. El  4. El   5. El
                        6. El   7. El  8. El  9. El  10. El  11. El

                        und so weiter

                        Und in Zelle $a soll eine fortlaufende Nr. stehen, die Zählung soll mit 1 beginnen und mit 404 enden, weil es insgesamt 404 Arrays sind.

                        Du benötigst einen Zeilenzähler, nicht einen Zellenzähler.
                        Du darfst den Zeilenzähler nur bei jeder Datenzeile einmal hochzählen
                        Weiterhin benötigst Du einen Zellenzähler, der bei jeder Zeile von vorn zählt, damit Du an geeigneter Stelle die neue Zeile einleiten kannst (und die CSS-Klasse zuweisen kannst).

                        Die Verarbeitungslogik wäre wie folgt.

                        Initialisiere Zeilennumerierung
                        Beginne HTML-Tabelle
                        Für jede Datenzeile
                            Initialisiere die Zellennumerierung
                            Beginne erste HTML-Zeile

                        Beginne HTML-Zelle
                            Schreibe Zeilennumerierung
                            Erhöhe Zeilennumerierung
                            Schließe HTML-Zelle

                        Für jede Zelle in der Zeile
                                Beginne HTML-Zelle
                                Schreibe aktuellen Wert
                                Schreibe HTML-Zeilenumbruch ;-)
                                Schreibe Wert:, Zellennummer
                                Erhöhe Zellennummer
                                Schließe HTML-Zelle ab
                                Wenn Du aufgrund der Zellennummer das Ende der ersten Zeile erkennst
                                    Schließe erste HTML-Zeile ab
                                    Beginne zweite HTML-Zeile
                                Ende Wenn
                            Ende "Für jede Zelle"
                            Schließe HTML-Zeile ab
                        Ende "Für jede Zeile"
                        Schließe HTML-Tabelle ab

                        Anmerkung: Aufgrund der Zellennummer in der Datenzeile kannst Du problemlos die entsprechende CSS-Klasse zuweisen. Schreibe dazu einfach die Klassen in ein Array und nutze die Zellennummer als Arrayindex.

                        Weitere Anmerkung:
                        Benötigst Du wirklich zwei Tabellenzeilen pro Datenzeile? Wäre es nicht viel verständlicher (insbesondere mit entsprechenden Spaltenüberschriften), wenn es je Datenzeile genau eine Zeile in der HTML-Tabelle gäbe - auch wenn dies bei 11 Spalten vermutlich bei vielen Benutzern zu horizontalem Scrolling führt?

                        Freundliche Grüße

                        Vinzenz

                        1. Hallo :)

                          Die Verarbeitungslogik wäre wie folgt.

                          Initialisiere Zeilennumerierung
                          Beginne HTML-Tabelle
                          Für jede Datenzeile
                              Initialisiere die Zellennumerierung
                              Beginne erste HTML-Zeile

                          Beginne HTML-Zelle
                              Schreibe Zeilennumerierung
                              Erhöhe Zeilennumerierung
                              Schließe HTML-Zelle

                          [...]

                          Schließe HTML-Tabelle ab

                          Das überfordert mich derzeit.
                          Ich bin davon ausgegangen, ich muss nur einen Zähler erstellen, dessen jeweiliges Ergebnis im ersten Feld eines jeden Arrays mit der Variablen $a eine fortlaufende Zahl einträgt.
                          Meine PHP Kenntnisse sind einfach zu mager, um derzeit mehr zu machen.

                          Weitere Anmerkung:
                          Benötigst Du wirklich zwei Tabellenzeilen pro Datenzeile? Wäre es nicht viel verständlicher (insbesondere mit entsprechenden Spaltenüberschriften), wenn es je Datenzeile genau eine Zeile in der HTML-Tabelle gäbe - auch wenn dies bei 11 Spalten vermutlich bei vielen Benutzern zu horizontalem Scrolling führt?

                          Ein Blick auf das Muster.
                          Das kann nicht abgeändert werden. Ich habe die Zahlen in der ersten Spalte inzwischen per Hand nachgesetzt. Dort sollte die automatische Zählung hinein.

                          mfg
                          cygnus

                          --
                          Die Sache mit der Angel und dem  ><o(((°>  hat immer einen Haken ...
                          1. Ein Blick auf das Muster.
                            Das kann nicht abgeändert werden. Ich habe die Zahlen in der ersten Spalte inzwischen per Hand nachgesetzt. Dort sollte die automatische Zählung hinein.

                            $classes = array('a','b','c','d','e','f','g','h','i','j','k','ko');
                            $limit = 0;
                            $max = 202;

                            foreach($verse as $row){
                              break if $limit == $max;  // Schleife beenden wenn grenzwert erreicht
                              $limit++;                 // Zähler erhöhen
                              echo "\n\n<tr>",
                                   "\n  <td>", $limit,"</td>"; // anstelle von Element a ausgeben
                              // 10 Elemente ohne a können identisch behandelt werden.
                              // Die Klassen nehme ich aus dem obigen Array
                              for( $i=1; $i<=10; $i++){
                                echo "\n  <td class="", $classes[$i],"">", $row[$i], "</td>"
                              }
                              // Element 11 und 12 werden gesondert behandelt
                              echo "</tr>",
                                   "\n<tr>",
                                     "\n  <td class="k">" , $row[11] , "</td>",
                                     "\n  <td class="ko" colspan="8">" , $row[11] , "</td>",
                                   "</tr>";
                            }

                            Ich habe keine Ahnung von der Materie, aber das ist in etwa mein Perlweg nach PHP umgesetzt.

                            mfg Beat

                            --
                            ><o(((°>           ><o(((°>
                               <°)))o><                     ><o(((°>o
                            1. Hallo Beat,

                              ich habe kürzlich gelesen, dass PHP einfacher sein soll als Perl,
                              aber dass ein guter Perl-Programmierer jedes Problem in den Griff bekommt.

                              mfg
                              cygnus

                              --
                              Die Sache mit der Angel und dem  ><o(((°>  hat immer einen Haken ...
                              1. Hallo.

                                ich habe kürzlich gelesen, dass [...] ein guter Perl-Programmierer jedes Problem in den Griff bekommt.

                                Ich glaube auch nicht, dass es gute Perl-Programmierer gibt.
                                MfG, at

                                1. Hallo :)

                                  ich habe kürzlich gelesen, dass [...] ein guter Perl-Programmierer jedes Problem in den Griff bekommt.

                                  Ich glaube auch nicht, dass es gute Perl-Programmierer gibt.

                                  Und ich habe gehört, dass es auch keine guten Henker geben soll.

                                  mfg
                                  cygnus

                                  --
                                  Die Sache mit der Angel und dem  ><o(((°>  hat immer einen Haken ...
                                2. Ich glaube auch nicht, dass es gute Perl-Programmierer gibt.

                                  Nein, es gibt nur böse Programmierer und überflüssige Glasperlenspieler.

                                  mfg Beat

                                  --
                                  Woran ich arbeite:
                                  X-Torah
                                  ><o(((°>           ><o(((°>
                                     <°)))o><                     ><o(((°>o
                          2. Hallo,

                            Die Verarbeitungslogik wäre wie folgt.

                            Initialisiere Zeilennumerierung
                            Beginne HTML-Tabelle
                            Für jede Datenzeile
                                Initialisiere die Zellennumerierung
                                Beginne erste HTML-Zeile

                            Beginne HTML-Zelle
                                Schreibe Zeilennumerierung
                                Erhöhe Zeilennumerierung
                                Schließe HTML-Zelle
                            [...]
                            Schließe HTML-Tabelle ab

                            Das überfordert mich derzeit.
                            Ich bin davon ausgegangen, ich muss nur einen Zähler erstellen, dessen jeweiliges Ergebnis im ersten Feld eines jeden Arrays mit der Variablen $a eine fortlaufende Zahl einträgt.

                            Warum ist es sinnvoll, zwei Zähler zu nutzen?

                            a) Du benötigst einen, um Deine Datenzeile (die eine HTML-Doppelzeile ist)
                               durchzunumerieren.

                            b) Innerhalb einer Datenzeile kannst Du den zweiten Zähler für die
                               Identifikation der Zelle, die Zuweisung des Inhaltes und die Zuweisung
                               der Klasse nutzen.

                            Meine PHP Kenntnisse sind einfach zu mager, um derzeit mehr zu machen.

                            Das hat mit PHP nichts zu tun - das ist Programmiertechnik :-)

                            Ein Blick auf das Muster.
                            Das kann nicht abgeändert werden. Ich habe die Zahlen in der ersten Spalte inzwischen per Hand nachgesetzt. Dort sollte die automatische Zählung hinein.

                            Altgriechisch sollte auch mit altgriechischen Zeichen geschrieben werden, dann könnte ich es wenigstens lesen ;-) Zumindest leuchtet mir ein, warum Du die Datenzeile $verse nennst.

                            Zum einen könntest Du mein Vorgehen an Deine Bedürfnisse anpassen, nutze dazu die Hinweise von Beat. Auf der anderen Seite könntest Du auch mit einem Template arbeiten, das heißt einer Schablone für eine Datenzeile:

                            $template = '  
                            <tr>  
                                <td class="a">{#nr#}<br>404</td>  
                                <td class="b">{#b#}</td>  
                                <td class="c">{#c#}</td>  
                                <td class="d">{#d#}</td>  
                                <td class="e">{#e#}</td>  
                                <td class="f">{#f#}</td>  
                                <td class="g">{#g#}</td>  
                                <td class="h">{#h#}</td>  
                                <td class="i">{#i#}</td>  
                            </tr>  
                            <tr>  
                                <td class="k"></td>  
                                <td class="ko" colspan="8"><p class="ko">{#k#}</p></td>  
                            </tr>  
                            ';
                            
                            // Array der zu ersetzenden Platzhalter:  
                            $search = array(  
                                '{#nr#}',  
                                '{#b#}',  
                                '{#c#}',  
                                '{#d#}',  
                                '{#e#}',  
                                '{#f#}',  
                                '{#g#}',  
                                '{#h#}',  
                                '{#i#}',  
                                '{#k#}'  
                            );  
                            
                            

                            Verwende str_replace(), um die Platzhalter (hier gekennzeichnet durch Einschließung in {# #}) durch die aktuellen Werte zu ersetzen.

                            Die Werte erhältst Du, indem Du als erstes Element zu Deinem Zeilenarray die aktuelle Zeilennummer hinzufügst. Dazu kannst Du array_unshift() nutzen.

                            Die Vorgehensweise vereinfacht sich zu:

                            # Initialisiere Spaltenüberschriften  
                            # Anmerkung:  
                            #     Verwende th-Elemente, vermutlich kannst Du auf die Klasse "head"  
                            #     verzichten.  
                            $head = '  
                                <tr class="head">  
                                    <td class="a">Vers Nr.<br>A<br>O</td>  
                                    <td colspan="2">Luther&nbsp;1545<br>Alpha / Omega</td>  
                                    <td colspan="2">Greek<br>Alpha / Omega</td>  
                                    <td colspan="2">Vulgata<br>Alpha / Omega</td>  
                                    <td colspan="2"></td>  
                                </tr>  
                            ';  
                              
                            # Initialisiere Schablone (Template)  
                            # Anmerkung:  
                            #     a, b, c, ... sind *keine* guten Klassennamen.  
                            $template = '  
                                <tr>  
                                    <td class="a">{#nr#}<br>404</td>  
                                    <td class="b">{#b#}</td>  
                                    <td class="c">{#c#}</td>  
                                    <td class="d">{#d#}</td>  
                                    <td class="e">{#e#}</td>  
                                    <td class="f">{#f#}</td>  
                                    <td class="g">{#g#}</td>  
                                    <td class="h">{#h#}</td>  
                                    <td class="i">{#i#}</td>  
                                </tr>  
                                <tr>  
                                    <td class="k"></td>  
                                    <td class="ko" colspan="8"><p class="ko">{#k#}</p></td>  
                                </tr>  
                            ';  
                              
                            # Initialisiere Platzhalter-Array  
                            # Array der zu ersetzenden Platzhalter:  
                            # Passe dies an Deine Vorgaben an, ich komme nicht auf 11 Einträge :-)  
                            $search = array(  
                                '{#nr#}',  
                                '{#b#}',  
                                '{#c#}',  
                                '{#d#}',  
                                '{#e#}',  
                                '{#f#}',  
                                '{#g#}',  
                                '{#h#}',  
                                '{#i#}',  
                                '{#k#}'  
                            );  
                              
                            # Initialisiere Zeilennumerierung mit 1  
                            $zeile = 1;  
                              
                            # Beginne HTML-Tabelle  
                            # Wir bauen den HTML-Code der Tabelle in einer Zeichenkette zusammen;  
                            # die Ausgabe erfolgt erst, wenn wir fertig sind.  
                            $output = "<table>\n";  
                              
                            # Schreibe feste Kopfzeile mit den Überschriften  
                            # bekommst Du bestimmt selber hin :-=  
                            $output .= $head;  
                              
                            # Für jede Datenzeile  
                                # Ich fände es sinnvoller, wenn das zweidimensionale Array $tabelle heißt  
                                # und eine aktuelle Zeile als $verse angesprochen wird  
                            [link:http://www.php.net/manual/de/control-structures.foreach.php@title=foreach] ($tabelle as $verse) {  
                                # Zeilennumerierung  
                                # Füge an den Anfang der Datenzeile die aktuelle Zeilennummer ein  
                                [link:http://www.php.net/manual/de/function.array-unshift.php@title=array_unshift]($verse, $zeile);  
                                # Erhöhe die aktuelle Zeilennummer  
                                $zeile++;  
                              
                                # Alternativ kannst Du den [link:http://www.php.net/manual/de/language.operators.increment.php@title=Post-Inkrementoperator] bereits in die  
                                # vorhergehende Zeile integrieren. Statt zwei Zeilen bleibt eine:  
                                    # array_unshift($verse, $zeile++);  
                                # Dies fügt zuerst den aktuellen Inhalt der Variablen $zeile an den  
                                # Anfang des Arrays $verse an und erhöht *danach* den Wert von $zeile  
                              
                                # HTML-Zeilen schreiben  
                                # Ersetze in der Schablone die Platzhalter und schreibe das Resultat  
                                $output .= str_replace($search, $verse, $template);  
                            } # Ende "Für jede Zeile"  
                              
                            # Schließe HTML-Tabelle ab  
                            $output .= "</table>\n";  
                              
                            # ganze Tabelle ausgeben:  
                            print $output;  
                            
                            

                            Die einzelnen Schritte habe ich durch ein paar Erläuterungen für Dich ergänzt (in normalen Kommentaren haben diese Erklärungen nichts mehr verloren) und in die jeweilige PHP-Anweisung übersetzt (ungetestet ;-)).

                            Genauso läßt sich übrigens mein Pseudocode aus dem vorhergehenden Beitrag 1:1 in PHP-Code umsetzen.

                            Freundliche Grüße

                            Vinzenz

                            1. Hallo VInzenz,

                              für die Mühe danke ich Dir noch einmal ganz besonders.

                              Ganz ehrlich:
                              Ich werde mir das genau ansehen, aber ob ich es überhaupt verstehe, weiss ich nicht. Das wirkt so kompliziert, wenn auch sicher angebracht ist.
                              Ich kopiere mir das mal und probiere damit herum.
                              Ich mache ja noch mehr Tabellen, die komplizierter sind als die jetzt erstellte.

                              mfg
                              cygnus

                              --
                              Die Sache mit der Angel und dem  ><o(((°>  hat immer einen Haken ...
  2. Hallo :)

    Ich habe es heute fast sofort geschafft und inzwischen zwei Zähler integriert, die auf und ab zählen und nur die Durchläufe der gesamten foreachSchlaufe zählen.
    Die Problemlösung war so leicht, leichter geht es nicht, und es ist, wie ich es mir zuvor vorgestellt hatte.
    Ich konnte es nur nicht umsetzen.
    Fragt mich jetzt bitte nicht, warum ich fast 2 Tage dafür gebraucht habe.
    Ich weiss es nicht.

    Meine Frage war wohl zu verwirrend gestellt, und die Antwort darauf hat mich wiederum verwirrt. Wenn es nicht funktionierte, habe ich zuviel herumprobiert und die Schleife an die falsche Stelle gestellt usw.

    Genau genommen ist es die Lösung von Beat (die er mir schon vorgeschlagen hatte, bevor ich hier gefragt habe) und von ChristB, nur gestern und vorgestern ging eben gar nichts.

    Allerdings finde ich die Variablenwahl ($a und $z) in den count-schleifen unlogisch, ich hätte sie gern $z1 und $z2 oder $x und $y genannt, aber es funktioniert auf dem localhost nur so wie ich es jetzt habe, und dann sei es eben auch so.

    Ich habe das jetzt so gelöst (noch nicht online):

    $count1 = 0;
    for($z = 1; $z<=5; $z++)
    {$a = $count1 + $z;}

    $count2 = 405;
    for($z = 1; $z<=5; $z--)
    {$z = $count2 - $z;}

    foreach($data as $tabelle)
    {list($a, $b, $c, $d, $e, $f, $g, $h, $i, $k, $ko) = $tabelle;

    echo "\n\n<tr><td class='a'>" , ++$count1 , "<hr class='ao'>" , --$count2 , "</td>\n<td class='b'>";

    mfg
    cygnus

    --
    Die Sache mit der Angel und dem  ><o(((°>  hat immer einen Haken ...
  3. Und hier ist eine weitere Version von des Kaisers neue Kleider:
    (Märchenversion der Diskussion)

    Kaiser Ich geht ganz stolz mit seinen neuesten Kleidern spazieren,
    zwei Zählern, die in der ersten Zelle der mit PHP erzeugten Tabelle auf- und abwärts zählen.

      
    $count1 = 0;  
    for($z = 1; $z<=5; $z++)  
    {$a = $count1 + $z;}  
      
    $count2 = 405;  
    for($z = 1; $z<=5; $z--)  
    {$z = $count2 - $z;}  
      
    foreach($data as $ausgabe)  
    {list($nr, $a, $b, $c ) = $ausgabe;  
      
    echo "\n\n<tr><td class='zahl'>" , ++$count1 , "<hr class='ao'>" , --$count2 , "</td>\n<td class='text'>";  
      
    
    

    Beat: &a und $z ist natürlich Unsinn.

    Kaiser Ich: Ist mir egal. Ich bin froh, dass es zählt, und wenn ich etwas daran verändere, zählt es nicht mehr.
    Ich laufe jetzt mit diesen for-schleifen herum und lasse mich damit vom Volk bejubeln.

    Beat: Aber mit den Variablen wird ja gar nichts gemacht!

    Kaiser Ich: Ja, hab ich auch schon gemerkt. Kommt mir vor wie ein Blinddarm.
    Aber ich bin so froh, dass gezählt wird, und es zählt nur mit diesen beiden Variablen, und wehe ich nenne sie anders, dann zählt gar nichts mehr.
    Aber da ist noch was: Egal ob ich $z<=5 oder $z<=405 eintrage - es zählt immer. Nur 0 darf ich nicht eintragen.
    Ist das Magie?

    (Anmerkung des Erzählers:
    Merkt es jemand: Magie beim Computer, wie ab-artig!)

    Beat: Die Schleife ist Blödsinn.
    Es wird nur $count1 und $count2 gebraucht.

    (Anmerkung des Erzählers:
    Manche vom Volk können so grausam sein.)

    Kaiser Ich wird rot, nimmt die for-Schleife versuchsweise weg, und es zählt immer noch.

      
      
    $count1 = 0  
    $count2 = 405  
      
    foreach($data as $ausgabe)  
    {list($nr, $a, $b, $c ) = $ausgabe;  
      
    echo "\n\n<tr><td class='a'>" , ++$count1 , "<hr class='ao'>" , --$count2 , "</td>\n<td class='b'>";  
      
    
    

    Kaiser Ich geht sich schämen und möchte dabei eine Woche lang nicht gestört werden.

    mfg
    cygnus

    --
    Die Sache mit der Angel und dem  ><o(((°>  hat immer einen Haken ...
    1. Hallo Kaiser,

       # Du hast eine  
        
      # Jacke und  
      
      > $count1 = 0  
        
      # eine Hose  
      
      > $count2 = 405  
        
      
      > foreach($data as $ausgabe)  
      > {list($nr, $a, $b, $c ) = $ausgabe;  
      >   
      > echo "\n\n<tr><td class='a'>" , ++$count1 , "<hr class='ao'>" , --$count2 , "</td>\n<td class='b'>";  
      > 
      
      

      ich empfehle Dir einen Overall :-)

      Im ersten Schleifendurchlauf hast Du die Werte:
      1    = 405 - 404
      404

      im zweiten Durchlauf:
      2    = 405 - 403
      403

      ...
      im letzten Durchlauf:
      404  = 405 - 1
      1

      Du siehst, die Summe ist immer 405

      Der Kaiser ließ sich statt Jacke und Hose einen Overall nähen, weil ein Overall bequemer ist. Somit kommen wir in diesem Schloß ($data) mit 404 Zimmern (Arrays) zu

      $overall = 0  
        
      foreach($data as $ausgabe) {  
          list($nr, $a, $b, $c ) = $ausgabe;  
          # Der Overall ist durchaus knifflig :-)  
          # Daran denken: der Prä-Inkrement-Operator erhöht zuerst  
          # und der Komma-Operator wird von links nach rechts abgearbeitet.  
          echo "\n\n<tr><td class='a'>" , ++$overall , "<hr class='ao'>" , 405 - $overall , "</td>\n<td class='b'>";  
      }
      

      Kaiser Ich geht sich schämen und möchte dabei eine Woche lang nicht gestört werden.

      Aha, ich erzähle die Geschichte weiter:

      Der Kaiser zog, um sich eine Woche lang zu schämen, in das verfallenste Schloss (anderer Bibelabschnitt, vermutlich Jeremias). Da merkte der Kaiser, dass ihm der Overall nicht mehr passte, weil dieses Schloss nicht über 405 Zimmer verfügte. Er probierte Jacke und Hose und fand heraus, dass die Hose ebenfalls nicht mehr passte. Ohne Hose wollte er nicht umherlaufen - das kannte er vom erstenmal, als er sich neue Kleider machen ließ.

      Seine Schneider, die er zum Glück mitgenommen hatte, zählten die Zimmer (die Array-Einträge) und fanden heraus, dass dieses Schloss 24 Zimmer hatte. Sie nähten daher einen neuen Overall nach dem alten Schnittmuster und stickten die 25 (Zimmerzahl plus 1) mit Goldfäden auf die Innenseite des Overalls. Sie wollten die Summe zuerst auf die Brust nähen; der Kaiser erhob jedoch Einspruch, dass die protzigen Goldfäden nicht mit der Asche auf seinem Haupt harmonierten:

      $overall = 0  
        
      foreach($data as $ausgabe) {  
          list($nr, $a, $b, $c ) = $ausgabe;  
          echo "\n\n<tr><td class='a'>" , ++$overall , "<hr class='ao'>" , 25 - $overall , "</td>\n<td class='b'>";  
      }
      

      Der Kaiser freute ich über den wundervollen Overall, schickte die Schneider für zwei Monate in Urlaub, und beschloss, zur Feier des neuen passenden Overalls in der Folgewoche ein Fest in seinem Jagdschloß (195 Zimmer) abzuhalten. Kaum war er dort angelangt, stellte er zu seinem Entsetzen fest, dass der neue Overall schon wieder nicht mehr passte. War der erste zu weit, so war der neue zu eng. Jacke und Hose hatte er gar nicht mehr mitgenommen.

      In dieser Notlage griff der Kaiser zum letzten Strohhalm, der ihm noch blieb. Er wandte sich an den Bademeister des Teiches im Schlosspark. Nach kurzer Überlegung hatte dieser die Lösung parat: Der Overall muss nur die Zimmer (Einträge im Array) zählen und zur Gesamtzahl die Zahl 1 addieren. Innerhalb weniger Minuten präsentierte der Bademeister dem Kaiser den ersten programmierbaren Overall:

        
      # Zähle die Arrayeinträge und addiere 1 dazu  
      $anzahl = [link:http://www.php.net/manual/de/function.count.php@title=count]($data) + 1  
      $overall = 0  
        
      foreach($data as $ausgabe) {  
          list($nr, $a, $b, $c ) = $ausgabe;  
          echo "\n\n<tr><td class='a'>" , ++$overall , "<hr class='ao'>" , $anzahl - $overall , "</td>\n<td class='b'>";  
      }
      

      Der Bademeister nahm den Kaiser mit in die Hütte des Wildhüters, das nur ein Zimmer hatte und siehe da: selbst dort passte der Overall. Seine Begeisterung verflog jedoch rasch, da der Overall nun schmutzig war und er ihn waschen lassen musste. Deswegen ließ sich unser Kaiser einen zweiten Overall fertigen, eine exakte Kopie des ersten. So musste er nicht unpassend gekleidet oder gar nackt herumlaufen, wenn der erste bei der Wäsche war. Den zweiten Overall nannte der Kaiser "Backup".

      Aus Freude über den für alle Schlösser und Schlösschen passenden Overall und den Ersatz für den Waschtag beschloss der Kaiser, einen neuen Feiertag einzuführen, den "Tag der immer passenden Kleider". Weil dem Kaiser seine Untertanen sehr am Herz lagen, ließ er das Schnittmuster in allen öffentlichen Schwimmbädern auslegen, damit jeder sich seinen eigenen programmierbaren Overall nähen konnte.

      Und wenn sie nicht gestorben sind, dann feiern sie noch heute ...

      Freundliche Grüße

      Vinzenz

      1. Hallo Vinzenz,

        Aus Freude über den für alle Schlösser und Schlösschen passenden Overall und den Ersatz für den Waschtag beschloss der Kaiser, einen neuen Feiertag einzuführen, den "Tag der immer passenden Kleider". Weil dem Kaiser seine Untertanen sehr am Herz lagen, ließ er das Schnittmuster in allen öffentlichen Schwimmbädern auslegen, damit jeder sich seinen eigenen programmierbaren Overall nähen konnte.

        TOLL!

        Und wenn sie nicht gestorben sind, dann feiern sie noch heute ...

        Ich mache mir gerade ernsthafte Sorgen, dass ich mich vorzeitig totlachen könnte ...

        mfg
        cygnus

        --
        Die Sache mit der Angel und dem  ><o(((°>  hat immer einen Haken ...
        1. Hi,

          Ich mache mir gerade ernsthafte Sorgen, dass ich mich vorzeitig totlachen könnte ...

          Mach dir keine Sorgen. Deine Zeit ist um, wenn sie um ist.
          Wenn sie es also noch nicht ist, wirst du dich auch noch nicht tot lachen.
          Und wenn doch - dann gibt's vermutlich schlimmere Arten, das Zeitliche zu segnen.

          MfG ChrisB

          --
          „This is the author's opinion, not necessarily that of Starbucks.“
          1. Hallo :)

            Und wenn doch - dann gibt's vermutlich schlimmere Arten, das Zeitliche zu segnen.

            Das denke ich auch.
            Auf jeden Fall ist das Märchen von Vinzenz über die Maßen köstlich weitererzählt.
            Wenn man sich also schon totlachen möchte, dann nur mit solchen phantasie- und humorvollen  Märchen!

            Man stelle sich vor, es gäbe ein PHP Handbuch, in dem nur solche Märchen stehen, wie einfach wäre es dann, bereits im Kindergarten die einzelnen Schritte nachvollziehen zu können.

            mfg
            cygnus

            --
            Die Sache mit der Angel und dem  ><o(((°>  hat immer einen Haken ...