Problem mit der Sortierung eines Arrays

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

  • Problem mit der Sortierung eines Arrays

    Ich habe hier eine Bildergalerie geschrieben, allerdings funktioniert die Sortierung nicht. Statt 1,2,3 wird 1,10,11 ausgegeben. Mit natsort() habe ich es schon probiert und das Forum hier habe ich danach auch schon abgesucht allerdings habe ich nichts passendes gefunden.

    Die Bilder sind alle fortlaufend nummeriert. Also Bild1.jpg, Bild2.jpg,... Die Ausgabe der Bilder ist kein Problem und es wird alles so dargestellt wie es sein soll. Das einzige Problem ist die Sortierung der Bilder. Das heißt statt Bild1.jpg, Bild2.jpg wird Bild1.jpg, Bild10.jpg, Bild11.jpg ausgegeben.

    Ich hoffe jemand kann mir bei meinem Problem helfen.

    Hier der Code

    PHP-Code:

    <?php
    // ordner festlegen
    $pfad "ordner/";
    $tpfad $pfad."thumbs/";

    // bilder array
    $bilder = array();

    // thumbs durchsuchen
    $handle=opendir($tpfad);
    while(
    $file=readdir($handle))   {
       if(
    preg_match("/.(jpg)$/i"$file)){
          
    $bilder[] = $file;
        }
    }
    closedir($handle);
    natsort($bilder);
      
    //Wieviele bilder?
    $maximal "35";
    //Bilder im Array zählen
    $gesamt count($bilder);

    // Variable in URL kontrollieren 
    if($_GET['seite'] == "" || !is_numeric($_GET['seite']) || $_GET['seite']>ceil($gesamt/$maximal))
    {
    $start 0;
    }
    else
    {
    $start $_GET['seite'] * $maximal;
    }
    //Letztes Bild der Anzeige
    $end=$start+$maximal;

    //gibts das?
    if($end>$gesamt)$end=$gesamt;

    //aktuelle Seite mit 35 bildern ausgeben
    for($x=$start;$x<$end;$x++)
    {
    if(
    $bilder[$x] == '')
    {echo 
    ""; }
    else
    {
    //Infos zu den Bildern
    $info getimagesize($pfad.$bilder[$x]);
    $size number_format(round(filesize($pfad.$bilder[$x])),0);
    $breite $info[0];
    $laenge $info[1];

    echo 
    '<div class="img"><a href="'.$pfad.$bilder[$x].'" target="_blank" >
    <img src="'
    .$tpfad.$bilder[$x].'" width="100" height="100"></a>#
    <div class="titel">'
    .$breite.'x'.$laenge.'<br>'.$size.' KB</div></div>
    '
    ; }
    }

    //Seiten
    echo "<br/>";

    //Seitenzahl rausfinden
    $seiten=ceil($gesamt/$maximal);

    if(
    $seiten>1)
    {
    //Links ausgeben
    for($x=1;$x<=$seiten;$x++)
    {
    $y $x -1;
    echo 
    "<a href=".$_SERVER['PHP_SELF']."?seite=".$y.">Seite ".$x."</a> ";
    }
    }

    ?>
    Zuletzt geändert von picco; 03.05.2005, 16:15.

  • #2
    editiere sofort dein post:
    http://www.php-resource.de/forum/sho...threadid=50454

    und zeig mal, wie die dateien heißen.

    Kommentar


    • #3
      Ok ich habe meinen Thread nun editiert.

      Kommentar


      • #4
        natsort() sollte funktionieren - machmal ein print_r vorm natsort und einmal direkt danach.

        Kommentar


        • #5
          Wenn ich print_r sowohl dahiner als auch davor schreibe, passiert nichts. Wenn ich print_r($bilder); schreibe, dann erscheint mir eine 1.

          Kommentar


          • #6
            wenn print_r($bilder) eine 1 ausgibt, dann wird das array gar nicht richtig aufgebaut. dann kann deine applikation auch nicht funktionieren.

            aber irgendwie kann ich es mir nicht vorstellen, dass print_r sowas liefert.

            Kommentar


            • #7
              Wenn es nicht richtig aufgebaut ist, dann würden wahrscheinlich keine Bilder angezeigt werden. Ich kann gerne einen Screenshot von der Galerie anhängen. Es wird eine 1 über den Bildern links in der Ecke gezeigt. Ich habe auch $bilder = natsort($bilder) versucht aber auch das ging nicht.

              Kommentar


              • #8
                zeig mal lieber deinen aktuellen code.

                Kommentar


                • #9
                  Der aktuelle Code steht oben. Statt natsort$bilder); steht dort print_r(natsort($bilder));

                  Kommentar


                  • #10
                    oh mann...

                    einfach
                    PHP-Code:
                    print_r($bilder); 
                    natsort($bilder);
                    print_r($bilder); 

                    Kommentar


                    • #11
                      Irgendwie stehe ich auf dem Schlauch heute...

                      Ausgegeben wird

                      Array ( [0] => Kaworu1.jpg [1] => Kaworu10.jpg [2] => Kaworu11.jpg [3] => Kaworu12.jpg [4] => Kaworu13.jpg [5] => Kaworu14.jpg [6] => Kaworu15.jpg [7] => Kaworu16.jpg [8] => Kaworu17.jpg [9] => Kaworu18.jpg [10] => Kaworu19.jpg [11] => Kaworu2.jpg [12] => Kaworu20.jpg [13] => Kaworu21.jpg [14] => Kaworu22.jpg [15] => Kaworu23.jpg [16] => Kaworu24.jpg [17] => Kaworu25.jpg [18] => Kaworu26.jpg [19] => Kaworu27.jpg [20] => Kaworu28.jpg [21] => Kaworu29.jpg [22] => Kaworu3.jpg [23] => Kaworu30.jpg [24] => Kaworu31.jpg [25] => Kaworu32.jpg [26] => Kaworu33.jpg [27] => Kaworu34.jpg [28] => Kaworu35.jpg [29] => Kaworu36.jpg [30] => Kaworu37.jpg [31] => Kaworu38.jpg [32] => Kaworu4.jpg [33] => Kaworu5.jpg [34] => Kaworu6.jpg [35] => Kaworu7.jpg [36] => Kaworu8.jpg [37] => Kaworu9.jpg ) Array ( [0] => Kaworu1.jpg [11] => Kaworu2.jpg [22] => Kaworu3.jpg [32] => Kaworu4.jpg [33] => Kaworu5.jpg [34] => Kaworu6.jpg [35] => Kaworu7.jpg [36] => Kaworu8.jpg [37] => Kaworu9.jpg [1] => Kaworu10.jpg [2] => Kaworu11.jpg [3] => Kaworu12.jpg [4] => Kaworu13.jpg [5] => Kaworu14.jpg [6] => Kaworu15.jpg [7] => Kaworu16.jpg [8] => Kaworu17.jpg [9] => Kaworu18.jpg [10] => Kaworu19.jpg [12] => Kaworu20.jpg [13] => Kaworu21.jpg [14] => Kaworu22.jpg [15] => Kaworu23.jpg [16] => Kaworu24.jpg [17] => Kaworu25.jpg [18] => Kaworu26.jpg [19] => Kaworu27.jpg [20] => Kaworu28.jpg [21] => Kaworu29.jpg [23] => Kaworu30.jpg [24] => Kaworu31.jpg [25] => Kaworu32.jpg [26] => Kaworu33.jpg [27] => Kaworu34.jpg [28] => Kaworu35.jpg [29] => Kaworu36.jpg [30] => Kaworu37.jpg [31] => Kaworu38.jpg )
                      Woebei Kaworu das Bild heißt.

                      Kommentar


                      • #12
                        also, vorm sortieren:
                        [0] => Kaworu1.jpg [1] => Kaworu10.jpg [2] => Kaworu11.jpg
                        nachm sortieren:
                        [0] => Kaworu1.jpg [11] => Kaworu2.jpg [22] => Kaworu3.jpg
                        was willst du denn mehr?

                        Kommentar


                        • #13
                          Original geschrieben von penizillin
                          nachm sortieren:
                          Code:
                          quote:
                          [0] => Kaworu1.jpg [11] => Kaworu2.jpg [22] => Kaworu3.jpg
                          damit dürfte ja auch wohl klar sein, warum dein script noch nicht das gewünschte tut: die elemente werden zwar sortiert, der nummerische index aber nicht - du greifst aber trotzdem über diesen auf die elemente zu. und damit kriegst du sie dann natürlich auch wieder in einer unerwünschten reihenfolge ausgegeben.

                          nutze also beispielsweise foreach statt for als schleife für die ausgabe.
                          I don't believe in rebirth. Actually, I never did in my whole lives.

                          Kommentar


                          • #14
                            Mit foreach sieht die Ausgabe nun so aus:

                            PHP-Code:
                            foreach ($bilder as $pic) { 
                            echo 
                            '<div class="img">
                            <a href="'
                            .$pfad.$pic.'" target="_blank" ><img src="'.$tpfad.$pic.'" width="100" height="100"></a>
                            <div class="titel">'
                            .$breite.'x'.$laenge.'<br>'.$size.' KB</div></div>
                            '
                            ; }; }; }; 
                            Allerdings habe ich so eine Endlosschleife.

                            Kommentar


                            • #15
                              endlos?? mit foreach?
                              du eröffnest mir neue horizonten...

                              Kommentar

                              Lädt...
                              X