• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

array sortieren

adelhorst

Neues Mitglied
Hallo Forum.
Ich habe folgende Frage:
Kann man irgendwie dieses Array...
Code:
$array = array("1.jpg", "2.jpg", "3.jpg", "10.jpg", "5.jpg");
.. so sortieren, dass dies ...
Code:
array("1.jpg", "2.jpg", "3.jpg", "5.jpg", "10.jpg");
... dabei rauskommt!?

Ich bekomme immer nur dies dabei heraus:
Code:
array("1.jpg", "10.jpg", "2.jpg", "3.jpg", "5.jpg");

Wenn jemand eine Idee hätte, wäre ich dankbar.
Gruß Adelhorst
 
hi,
danke für den hinweis, funktioniert aber leider nicht. Kann aber an der PHP-Version liegen. Im Moment teste ich über xampp und da macht 'natsort' keinen Unterschied im Ergebnis.
Reverse's Sortieren habe ich ausprobiert um meine Anzeige und die Wirksamkeit vom Code zu testen, da bekomme ich auch ein reverse's Ergebnis, aber halt nicht mit dem gewünschten Ergebnis.

Edit: Hier läuft 5.5.3, also daran kann es NICHT liegen.
 
Zuletzt bearbeitet:
hi,
danke für den hinweis, funktioniert aber leider nicht. Kann aber an der PHP-Version liegen. Im Moment teste ich über xampp und da macht 'natsort' keinen Unterschied im Ergebnis.
Reverse's Sortieren habe ich ausprobiert um meine Anzeige und die Wirksamkeit vom Code zu testen, da bekomme ich auch ein reverse's Ergebnis, aber halt nicht mit dem gewünschten Ergebnis.

Edit: Hier läuft 5.5.3, also daran kann es NICHT liegen.

Wie sieht denn dein code aus? natsort erwartet eine referenz. Funktioniert anders als bspw array_reverse
 
Code:
        //**Sort
            if(count($arrRtrn)>1) natsort($arrRtrn);
        //**End
            return $arrRtrn;
    }
Der Code-Teil steht am Ende einer Funktion. Wie gesagt, wenn ich 'sort' oder 'rsort' verwende, dann sehe ich die Auswirkungen, d.h. Codeänderungen wirken sich auch auf meiner Ausgabe aus. (Ausgabe durchläuft iterativ das Array und gibt mir so den Inhalt des Arrays zum Test aus.)
 
Das funktioniert einwandfrei:
PHP:
<?php
  $array = array("1.jpg", "2.jpg", "3.jpg", "10.jpg", "5.jpg");
   
  natsort($array);
   
  echo "<pre>";
  print_r($array);
  echo "</pre>";
?>
Du rufst die Funktion richtig auf und nimmst auch den Return-Wert richtig entgegen?
 
Also ich habs auch nochmal getestet, bei xampp sowie bei mir auf nem Server. natsort macht genau das, was es soll

PHP:
function sortArr($arr) {
    if(count($arr) > 1) natsort($arr);
  
    return $arr;
}

$arr = array("1.jpg", "2.jpg", "3.jpg", "10.jpg", "5.jpg");

echo "<pre>";
print_r(sortArr($arr));
echo "</pre>";

Ausgabe:
Code:
Array
(
    [0] => 1.jpg
    [1] => 2.jpg
    [2] => 3.jpg
    [4] => 5.jpg
    [3] => 10.jpg
)

Als Alternative hätte ich noch folgendes, aber ob das bei dir funktioniert weiß ich nicht. Ist aber auch wieder etwas mehr aufwand.

PHP:
$arr1 = array("1.jpg", "2.jpg", "3.jpg", "10.jpg", "5.jpg");

$obj = new ArrayObject( $arr1 );
$it->natsort();

echo "<pre>";
print_r($it);
echo "</pre>";

Hier sind die Methoden aufgelistet, die dir zur verfügung stehen
http://php.net/manual/de/class.arrayiterator.php


EDIT: bzw. noch etwas, führt ja nicht nur ein Weg nach Rom :D
Also falls das Object Orientierte nicht nach deinem geschmack ist oder auch nicht funktioniert, kannst du dir auch ne sort funktion schreiben. Und dann das Array damit durchlaufen lassen. Müsstest ja nur die Werte exploden und dann mit den Zahlen sortieren

http://at1.php.net/manual/de/function.usort.php
 
Zuletzt bearbeitet:
Hallo Leute.
Vielen Dank für eure Hilfe und eure Zeit.
Meine Testfunktion sieht wie folgt aus:
Code:
    function testing(){
        $arr = array("1.jpg", "2.jpg", "3.jpg", "10.jpg", "5.jpg");
        natsort($arr);
        return $arr;
    }
'sort' und 'rsort' zeigen Reaktion und geben mir sortierte Arrays zurück.
'natsort' dagegen gibt mir das Array im Urzustand wieder.
Demnach funktioniert bei mir aus irgendwelchen Gründen nur dieses 'natsort' nicht!? Dies hab ich alles innerhalb von 'PHP' getestet.
Zum Test habe ich noch mal versucht was 'json_encode' damit veranstaltet:
Code:
echo json_encode(testing());
Da bekomme ich in JS mit 'sort' und 'rsort' die erwarteten Arrays zurück,
nur mit 'natsort' erhalte ich [object Object].

Ich werde da mal noch weitersuchen und die Alternativen ausprobieren, allerdings juckt es mich schon zu ergründen, warum die besagte Funktion bei mir nicht funktioniert.
Als Alternative eine eigene Sortier-Routine zu schreiben, macht hier keinen Sinn, da die zukünftig zu verarbeitenden Dateinamen keinen festen Standard-Konstrukt folgen werden. Die 'natsort'-Sortierung wäre daher ideal.

Gruß Adelhorst
 
also das ist ja wirklich merkwürdig, also bei mir funktioniert es einwandfrei.

Ansonsten ist hier noch was

PHP:
usort($array, "strnatcmp");

Damit erstellst du auch eine natürliche sortierung, vielleicht klappt das.
Vielleicht hat ja sonst noch jemand eine Idee :)
 
Zurück
Oben