Ermittlung des nächsten tr Tags

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

  • Ermittlung des nächsten tr Tags

    Hey,

    ich habe zurzeit noch eine etwas aufgeblähte File bei der sich mitunter ein Algorythmus wiederholt, da ich die Darstellungsform umändere bitte es sich hierbei an eine Schleife zu verwenden.

    Dabei habe ich mich im Moment bei einer möglichen LÖsung festgebissen.

    Situation:
    - Nach jedem 4 Datensatz erfolgt ein <tr> Tag

    also so eine Tabelle

    PHP-Code:
    <tr>
    <
    td>
    <
    td>
    <
    td>
    </
    tr>
    <
    tr>
    <
    td>
    <
    td>
    <
    td>
    </
    td
    Momentan hab ich mir überlegt ich lass das Array in einer foreach(); durchlaufen und dabei einen Zähler hochzählen. Und dabei jedesmal den Zählerdurchlauf durch 4 Teilen wenn dabei eine Ganzzahl sprich Integer rauskommt wird ein <tr> Tag ausgegeben.

    Problem hierbei:
    - Überprüfung obs ne Ganzahl ist
    - (Dynamisch) was aber wenn es 7 Elemente sind. Setzen des </tr> Tags?

    Alternative Lösungsmöglichkeiten?

    EDIT:
    Letzteres lässt sich ermitteln indem überprüft wird obs das letzte Array Element ist
    [color=blue]MfG Payne_of_Death[/color]

    [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
    [color=red]Merke:[/color]
    [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

    Murphy`s Importanst LAWS
    Jede Lösung bringt nur neue Probleme
    Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
    In jedem kleinen Problem steckt ein großes, das gern raus moechte.

  • #2
    hat das einen Sinn wenn die <td> und <tr> geöffnet und geschlossen werden?
    Was ist in dem array gespeichert?

    Offe

    Kommentar


    • #3
      in dem Array sind jeweils 2 Zustände true oder false.........
      Tut aber nichts nur Sache für einen bestimmten Teile des Mehrdimensionalen Arrays wird für jedes Element ein option Feld mit 2 Zuständen ausgegeben und das wird vom design her wie angegeben mit der Table ausgerichtet.......

      <tr> bekomme ich new Zeile
      und mit <td> komme ich zur nächsten Spalte......

      P.S. die <td> kannst du dir in der gleichen Zeile auch zu denken (ist ja klar oder?)
      [color=blue]MfG Payne_of_Death[/color]

      [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
      [color=red]Merke:[/color]
      [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

      Murphy`s Importanst LAWS
      Jede Lösung bringt nur neue Probleme
      Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
      In jedem kleinen Problem steckt ein großes, das gern raus moechte.

      Kommentar


      • #4
        Wäre mir klar wenn deine letzte Zeile ein </tr>(statt </td>) gewesen wäre.

        Denke ein foreach mit einem
        $zaehler++;
        if ($zaehler % 4)

        müßte gehen.

        Offe

        Kommentar


        • #5
          if (!$zaehler%4) ist richtiger, aber übersichtlicher ist es so:
          PHP-Code:
          if (($zaehler 4) == 0) { 
          so, zweites Problem einfach so lösen:
          PHP-Code:
          <table>
            <tr>
              <?php ... schleife ... ?>
            </tr>
          </table>
          so hast du dann tr offen, kannst in der schleife tr wieder zu und wieder auf machen, und am Ende ist es auf jeden fall wieder zu.
          Problem ist nur, wenn du genau 4 Dinger hast, weils dann 2mal zugemacht wird. musst du nur die if-abfrage etwas erweitern.
          hopka.net!

          Kommentar


          • #6
            if (($zaehler % 4) == 0) {
            </tr>
            <tr>
            }else {
            <td>Bla</td>
            }
            for ($zaehler1 = $zaehler % 4; $zaehler1 < ;$zaehler++)
            <td>& nbsp;</td>

            Offe

            Kommentar


            • #7
              Könnt mir mal diesen Modulo Operator besser erklären. Ich hab denn noch nie gebraucht. Selbst im Manual ist der nicht wirklich erklärt

              PHP-Code:
              $lastitem end($userlist['user']['ranks']); 
              reset($userlist['user']['ranks']); 

              foreach ( 
              $userlist['user']['ranks'] as $var ) {

              if (!
              zaehler 4) echo'<tr>';
              else echo
              '<td></td>'
              if (!zaehler || current($userlist['user']['ranks']) == $lastitem))echo'</tr>';

              }
              Sowas in die Richtung wäre nicht möglich
              [color=blue]MfG Payne_of_Death[/color]

              [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
              [color=red]Merke:[/color]
              [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

              Murphy`s Importanst LAWS
              Jede Lösung bringt nur neue Probleme
              Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
              In jedem kleinen Problem steckt ein großes, das gern raus moechte.

              Kommentar


              • #8
                Original geschrieben von Payne_of_Death
                Könnt mir mal diesen Modulo Operator besser erklären. Ich hab denn noch nie gebraucht. Selbst im Manual ist der nicht wirklich erklärt

                Der Modulo-Operator ist das Prozentzeichen %. Mit ihm lässt sich der ganzzahlige Rest einer Division bestimmen.


                PHP-Code:
                 <?php
                $rest 
                20%7;

                echo 
                "Der Rest von 20 durch 7 ist: ".$rest;    // Der Rest ist 6, denn 20 =(2*7)+6 = 14+6
                ?>
                Diesen Modulo-Operator braucht man, wenn man z.B. gucken möchte ob die Zahl gerade oder ungerade ist (modulo 2). Oder aber auch um Tabellenhintergründe abwechselnd farbig darzustellen.
                Quelle: http://tut.php-q.net/rechnen.html


                Zusammenfassung: Der Rest von der Division zweier Zahlen


                Floriam
                PHP Handbuch - MySQL Handbuch - PHP Einsteiger Tutorial - CSS Referenz - Browserunterstützung von CSS

                Kommentar


                • #9
                  0 % 4 = 0
                  1 % 4 = 1
                  2 % 4 = 2
                  3 % 4 = 3
                  4 % 4 = 0
                  5 % 4 = 1

                  siehe fmod

                  PHP-Code:
                  <table>
                  <
                  tr>
                  foreach ( 
                  $userlist['user']['ranks'] as $var ) {
                    
                  $zaehler++;
                    
                  $zaehler_mod_4 $zaehler 4;
                    if (!
                  $zaehler_mod_4) {
                      echo 
                  '</tr><tr>';
                      } else {
                        echo 
                  '<td>' $var '</td>';
                      }
                    }
                  }
                  // zum Auffüllen
                  if($zaehler_mod_4) {
                   echo 
                  "<td colspan=\"$zaehler_mod_4\">& nbsp;</td>";
                  }

                  </
                  tr>
                  </
                  table
                  Offe
                  Zuletzt geändert von Offe1; 27.12.2003, 12:30.

                  Kommentar


                  • #10
                    Original geschrieben von Payne_of_Death
                    Könnt mir mal diesen Modulo Operator besser erklären. Ich hab denn noch nie gebraucht. Selbst im Manual ist der nicht wirklich erklärt

                    PHP-Code:
                    $lastitem end($userlist['user']['ranks']); 
                    reset($userlist['user']['ranks']); 

                    foreach ( 
                    $userlist['user']['ranks'] as $var ) {

                    if (!
                    zaehler 4) echo'<tr>';
                    else echo
                    '<td></td>'
                    if (!zaehler || current($userlist['user']['ranks']) == $lastitem))echo'</tr>';

                    }
                    Sowas in die Richtung wäre nicht möglich?

                    Und sowas wie ich angedeutet habe ist nicht möglich??????
                    [color=blue]MfG Payne_of_Death[/color]

                    [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
                    [color=red]Merke:[/color]
                    [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

                    Murphy`s Importanst LAWS
                    Jede Lösung bringt nur neue Probleme
                    Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
                    In jedem kleinen Problem steckt ein großes, das gern raus moechte.

                    Kommentar


                    • #11
                      PHP-Code:
                      echo "<table>";
                      $zaehler 0;
                      foreach ( 
                      $userlist['user']['ranks'] as $var ) {
                        
                      $zaehler++;
                        
                      $zaehler_mod_4 $zaehler 4;
                        if (
                      $zaehler_mod_4 == 1) {
                          echo 
                      "<tr>\n";
                        }
                        if (
                      $zaehler_mod_4 == 0) {
                          echo 
                      "</tr>\n";
                        } else {
                          echo 
                      "  <td>$var</td>\n";
                        }
                      }
                      // zum Auffüllen
                      if($zaehler_mod_4) {
                       
                      $colspans $zaehler_mod_4;
                       echo 
                      "<td colspan=\"$colspans\">& nbsp;</td>\n";
                      }
                      echo 
                      "</tr>";
                      echo 
                      "</table>"
                      Offe
                      Zuletzt geändert von Offe1; 27.12.2003, 13:25.

                      Kommentar


                      • #12
                        So wie du @Offe1 hab ich es im Moment auch nur etwas kürzer........
                        Hab mir erst einmal den Modulo zu Gemüte geführt ein echt brauchbares Teil....
                        Jedoch ergibt sich bei meiner als auch deiner momentanen Situation der Umstand das es sofern es am Ende <> 4 Elemente sind ein HTML Gewurschtel habe.

                        D.h. man sieht noch die Tabelle jedoch wird der </tr> Tag nicht geschlossen, da die letzte Bedingung so nie zutreffen kann.....unsauber!

                        Man müsste an den aktuellen internen Zeigerwert kommen welcher die foreach(); liefert nur misslingt das bis dato.

                        1.) Möglichkeit: Das selbe Array in ein temporäres speichern und dort mit next(); jeweils +1 Elemtent weiter und sobald das letzte Element gleich dem aktuellen ist über pos(); oder current(); dann auch den </tr> Tag ausgeben.
                        Halte ich aber für ehrlich gesagt für eine Pfuschlösung

                        2.) Möglichkeit: Die Foreach (); vergessen und stattdessen eine while(); nehmen und dort auch mit next(); zum nächsten Element hüpfen so sollte ich doch an den internen Zeigerwert hinkommen oder????
                        [color=blue]MfG Payne_of_Death[/color]

                        [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
                        [color=red]Merke:[/color]
                        [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

                        Murphy`s Importanst LAWS
                        Jede Lösung bringt nur neue Probleme
                        Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
                        In jedem kleinen Problem steckt ein großes, das gern raus moechte.

                        Kommentar


                        • #13
                          das </tr> kann nicht fehlen
                          da am Ende:
                          echo "</tr>";
                          echo "</table>";
                          dafür war es doppelt

                          PHP-Code:
                          echo "<table>";
                          $anzahl count ($userlist['user']['ranks']);
                          $zaehler 0;
                          foreach ( 
                          $userlist['user']['ranks'] as $var ) {
                            
                          $zaehler++;
                            
                          $zaehler_mod_4 $zaehler 4;
                            if (
                          $zaehler_mod_4 == 1) {
                              echo 
                          "<tr>\n";
                            }
                            if (
                          $zaehler_mod_4 == 0) {
                              if(
                          $anzahl != $zaehler){
                                echo 
                          "</tr>\n";
                              }
                            } else {
                              echo 
                          "  <td>$var</td>\n";
                            }
                          }
                          // zum Auffüllen
                          if($zaehler_mod_4) {
                           
                          $colspans $zaehler_mod_4;
                           echo 
                          "<td colspan=\"$colspans\">& nbsp;</td>\n";
                          }
                          echo 
                          "</tr>";
                          echo 
                          "</table>"
                          Offe
                          Zuletzt geändert von Offe1; 27.12.2003, 14:57.

                          Kommentar


                          • #14
                            Original geschrieben von Offe1
                            das </tr> kann nicht fehlen
                            da am Ende:
                            echo "</tr>";
                            echo "</table>";
                            dafür war es doppelt
                            Du meinst bei dir jetzt oder wie, mein kleiner Test Code sieht derzeit so aus:

                            PHP-Code:
                            function get_tr() {
                              
                            $userlist['user']['ranks']['a'] = "aaa";
                              
                            $userlist['user']['ranks']['b'] = "bbb";
                              
                            $userlist['user']['ranks']['c'] = "ccc";
                              
                            $userlist['user']['ranks']['d'] = "ddd";
                              
                            $userlist['user']['ranks']['e'] = "eee";
                              
                            $userlist['user']['ranks']['f'] = "fff";
                              
                            $userlist['user']['ranks']['g'] = "ggg";
                              
                            $userlist['user']['ranks']['h'] = "hhh";
                              
                            $userlist['user']['ranks']['i'] = "iii";
                              
                            $userlist['user']['ranks']['j'] = "jjj";
                              
                            $userlist['user']['ranks']['k'] = "kkk";
                              
                            $userlist['user']['ranks']['l'] = "lll";
                              
                            $userlist['user']['ranks']['m'] = "mmm";
                              
                            $userlist['user']['ranks']['n'] = "nnn";
                              
                              
                            $lastitem end($userlist['user']['ranks']); 
                              
                            reset($userlist['user']['ranks']); 
                              echo 
                            'lastitem: '.$lastitem.'<br>';
                              
                              echo 
                            '<table border="1">';
                              
                              foreach ( 
                            $userlist['user']['ranks'] as $var ) {
                                
                            $i++;
                                if ( 
                            $i%== ) echo '<tr><td>'.pos($userlist['user']['ranks']).'<td>';
                                else echo 
                            '<td>'.$var.'</td>';
                                if ( 
                            $i%== ) echo '</tr>';
                              } 
                              echo 
                            '</table>';
                            // function

                            get_tr(); 
                            Und hier muss ich irgendwie an den internen Zeigerwert kommen von der foreach(); dann kann ich das aktuelle Element mit dem Letzten vergleichen.
                            Dann würde diese Problemchen wegfallen.....
                            [color=blue]MfG Payne_of_Death[/color]

                            [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
                            [color=red]Merke:[/color]
                            [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

                            Murphy`s Importanst LAWS
                            Jede Lösung bringt nur neue Probleme
                            Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
                            In jedem kleinen Problem steckt ein großes, das gern raus moechte.

                            Kommentar


                            • #15
                              wie lächerlich warum hab ich das nicht gleich gesehen
                              so jetzt passt es.........
                              PHP-Code:
                              function get_tr() {
                                
                              $userlist['user']['ranks']['a'] = "aaa";
                                
                              $userlist['user']['ranks']['b'] = "bbb";
                                
                              $userlist['user']['ranks']['c'] = "ccc";
                                
                              $userlist['user']['ranks']['d'] = "ddd";
                                
                              $userlist['user']['ranks']['e'] = "eee";
                                
                              $userlist['user']['ranks']['f'] = "fff";
                                
                              $userlist['user']['ranks']['g'] = "ggg";
                                
                              $userlist['user']['ranks']['h'] = "hhh";
                                
                              $userlist['user']['ranks']['i'] = "iii";
                                
                              $userlist['user']['ranks']['j'] = "jjj";
                                
                              $userlist['user']['ranks']['k'] = "kkk";
                                
                              $userlist['user']['ranks']['l'] = "lll";
                                
                              $userlist['user']['ranks']['m'] = "mmm";
                                
                              $userlist['user']['ranks']['n'] = "nnn";
                                
                                
                              $lastitem end($userlist['user']['ranks']); 
                                
                              reset($userlist['user']['ranks']); 
                                echo 
                              'lastitem: '.$lastitem.'<br>';
                                
                                echo 
                              '<table border="1">';
                                
                                foreach ( 
                              $userlist['user']['ranks'] as $var ) {
                                  
                              $i++;
                                  if ( 
                              $i%== ) echo '<tr><td>'.$var.'</td>';
                                  else echo 
                              '<td>'.$var.'</td>';
                                  if ( 
                              $i%== || $var == $lastitem) echo '</tr>';
                                } 
                                echo 
                              '</table>';
                              // function

                              get_tr(); 
                              [color=blue]MfG Payne_of_Death[/color]

                              [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
                              [color=red]Merke:[/color]
                              [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

                              Murphy`s Importanst LAWS
                              Jede Lösung bringt nur neue Probleme
                              Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
                              In jedem kleinen Problem steckt ein großes, das gern raus moechte.

                              Kommentar

                              Lädt...
                              X