Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Ausgabe von while-Schleife sortieren

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Ausgabe von while-Schleife sortieren

    Hallo,

    ich habe ein Problem beim sortieren der Ausgabe einer Textdatei.

    ich lese die Textdatei per while Schleife aus und gebe sie aus (Code gekürzt):
    Code:
    $datei2 = file("filme.txt");
    while($a < count($datei2))
      {
      $zerlegen = explode("|", $datei2[$a]);
      echo "
        <tr>
          <td>".$a."</td>
          <td>".$zerlegen[0]."</td>
          <td>".$zerlegen[1]."</td>
          <td>/ 100</td>
          <td>".$zerlegen[2]."</td>
        </tr>";
        $a++;
     }
    filme.txt:
    Code:
    film1|20|Serien
    film2|50|Thriller
    film1|45|Drama
    film4|56|Zombie
    film8|50|Drama
    film8|45|Drama
    film7|56|Zombie
    film2|95|Comedy
    film5|87|Zombie
    film3|50|Drama
    Kann ich die Liste nach $zerlegen[2] sortieren lassen?

    Also sollte die List nach "Genre" sortiert ausgegeben werden. Allerdings weiß ich nicht wo und wie ich die Sortierung benutzen soll, da ja Zeile für Zeile ausgelesen und gleichzeigt ausgegeben wird.

    Gibt es eine andere Möglichkeit?

    Vielen Dank

    Screenshot:


  • #2
    PHP-Code:
    $datei2 file("filme.txt");
    for(
    $i 0$i count($datei2); $i++)
      
    $datei2[$i] = explode("|"$datei2[$i]);

    usort($datei2, function($a$b){
      return 
    $a[1] - $b[1];
    });

    for(
    $i 0$i count($datei2); $i++){
      echo 
    "
        <tr>
          <td>"
    .$i."</td>
          <td>"
    .$datei2[$i][0]."</td>
          <td>"
    .$datei2[$i][1]."</td>
          <td>/ 100</td>
          <td>"
    .$datei2[$i][2]."</td>
        </tr>"
    ;

    Zitat von nikosch
    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

    Kommentar


    • #3
      PHP-Code:
      $aFileLines file'filme.txt'FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES );

      $aSortKeys array_map(
              function( 
      $line ) {
                  
      $splitted explode'|'$line );
                  return 
      end$splitted ); // oder $splitted[0...n], je nachdem, wonach sortiert werden soll
              
      },
              
      $aFileLines
          
      );

      array_multisort$aSortKeys$aFileLines );
      print_r$aFileLines ); 
      ...die Ausgabe würde ich dann über foreach lösen.
      Competence-Center -> Enjoy the Informatrix
      PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

      Kommentar


      • #4
        Dein Array muß er dann bei der Ausgabe aber nochmal exploden, Arne.
        Obwohl ich vermute, dass für den TE wird die Lösung von tkausl am besten geeignet ist, versuche ich noch einen draufzusetzen:
        PHP-Code:
        $file = new SplFileObject('filme.txt''r+');
        $file->setFlags(SplFileObject::READ_CSV |
                        
        SplFileObject::SKIP_EMPTY |
                        
        SplFileObject::DROP_NEW_LINE);
        $file->setCsvControl('|');

        $arr iterator_to_array($file);
        unset(
        $file);

        //Sortieren nach Genre und dann nach Wertung fallend
        array_multisort(
            
        array_column($arr,2), SORT_ASC
            
        array_column($arr,1), SORT_DESC,
            
        $arr
        ); 
        LG jspit
        PHP-Klassen auf github

        Kommentar


        • #5
          Dein Array muß er dann bei der Ausgabe aber nochmal exploden, Arne.
          Na und? tkausl´s Lösung nutzt zwei for, was ich wiederum nicht machen würde...
          Competence-Center -> Enjoy the Informatrix
          PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

          Kommentar


          • #6
            War mehr als Hinweis an den TE gedacht und sollte nicht als Kritik verstanden werden, wenn ja, dann sorry.
            PHP-Klassen auf github

            Kommentar


            • #7
              Als Kritik habe ich das auch nicht gesehen... Alles gut...
              Competence-Center -> Enjoy the Informatrix
              PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

              Kommentar


              • #8
                Wow! Vielen Dank für die ganzen Antworten

                Habe es allerdings zu spät gelesen und eine primitivere Art angewendet:

                Das Genre steht nun am Anfang der Zeile
                Code:
                Serie|Breaking Bad|99
                Horror|Wold Creek|70
                Zombie|Zombieland|75
                Serie|Homeland|98
                Damit muss ich nur
                PHP-Code:
                sort($datei2); 
                verwenden. Die Ausgabe musste natürlich auch verändert werden.
                PHP-Code:
                    echo "
                        <tr>
                            <td>"
                .$a."</td>
                            <td>"
                .$zerlegen[1]."</td>
                            <td"
                .$class.">".$zerlegen[2]."</td>
                            <td>/ 100</td>
                            <td>"
                .$zerlegen[0]."</td>
                        </tr>"

                Bei Gelegenheit teste ich alle beschriebenen Varianten durch

                Kommentar


                • #9
                  Das solltest Du, denn egal welche Du von den beiden wählst oder eine andere, die ähnlich arbeitet, bist Du flexibler, wenn Du mal nach was anderem sortieren willst.
                  Bei Deiner Variante mußt Du die Quelldateien bearbeiten, das ist pauschal Mist!
                  Competence-Center -> Enjoy the Informatrix
                  PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                  Kommentar


                  • #10
                    Bin ein blutiger Anfänger und beschäftige mich erst seit gestern mit PHP, also habe ich noch viel vor mir

                    Hier nochmal das komplette Script

                    Kommentar

                    Lädt...
                    X