Ergebnis 1 bis 8 von 8

Thema: [gelöst] Array sortieren nach Versionsnummern

  1. #1
    Contao-Urgestein Avatar von ways2web
    Registriert seit
    23.03.2010.
    Ort
    Berlin
    Beiträge
    1.698
    User beschenken
    Wunschliste

    Standard [gelöst] Array sortieren nach Versionsnummern

    ich hab da nen Array, dass ich nach Versionsnummern richtig sortiert ausgeben lassen möchte...
    hab mich durch usort, natsort und version_compare gegoogelt.. aber aufgrund meiner limitierten php-kenntnissen keinem Ergebniss angenährt.. kann mir da jemand helfen?

    ich wollte Contao Versionsnummern richtig sortiert ausgeben lassen... in nem einfachen foreach geht das natürlich nicht.

    PHP-Code:
    Array ( [0] => 2.10 [1] => 2.11 [2] => 2.8 [3] => 2.9 [4] => 3.0 [5] => 3.2 [6] => 3.3 
    über hilfe würde ich mich freuen.

    gruss
    ways
    Geändert von ways2web (04.09.2014 um 14:15 Uhr)

  2. #2
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.944

    Standard

    Mit usort und version_compare liegst Du eigentih schon mal richtig.

    "Natürlich" umgetestet:

    PHP-Code:
    $myVersions = array(...);

    usort($myversions"version_compare"); 
    sollte gehen, da version_compare laut Doku

    "Standardmäßig gibt version_compare() -1 zurück, wenn die erste Version kleiner ist als die zweite, 0, wenn die Versionen gleich sind und 1, wenn die zweite Version kleiner ist."

    also genau das, was die Vergleichsfunktion in usort machen muss:

    "Die Vergleichsfunktion muss einen Integer kleiner als, gleich oder größer als Null zurückgeben, wenn das erste Argument respektive kleiner, gleich oder größer als das zweite ist."

    Wenn Du anders herum sortieren willst: noch ein array_reverse auf das Ergebnis anwenden.

    Edit: sehe gerade

    PHP-Code:
    Array ( [0] => 2.10 [1] => 2.11 [2] => 2.8 [3] => 2.9 [4] => 3.0 [5] => 3.2 [6] => 3.3 
    Deine Array-Werte sind numerisch. Ich denke, die Versionsnummern sind Strings. Sonst könnte man 2.11.3 ja nicht angeben.
    Geändert von fiedsch (04.09.2014 um 06:34 Uhr)

  3. #3
    Contao-Urgestein Avatar von ways2web
    Registriert seit
    23.03.2010.
    Ort
    Berlin
    Beiträge
    1.698
    User beschenken
    Wunschliste

    Standard

    Das mit Version compare hab ich noch verstanden, aber nicht wie ich das ganze Array dadurch umsortieren kann. Da fehlt es mir deutlich an knowhow 😞

    gesendet mit Tapatalk.

  4. #4
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.944

    Standard

    Du hast Dein Array, übergibst es umsortiert (als Referenz) und nach dem Aufruf ist es sortiert.
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  5. #5
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.514
    User beschenken
    Wunschliste

    Standard

    PHP-Code:
    $a = array('2.4','2.3.4','2.4.0.9');
    usort($a'version_compare');
    print_r($a); 
    Hinweis aus dem Handbuch: Diese Funktion weist den Elementen des Arrays $a neue Schlüssel zu. Bestehende Schlüssel, die Sie eventuell zugewiesen haben, werden entfernt statt einfach nur die Schlüssel neu anzuordnen

    oder per natsort, müsste auch gehen.
    PHP-Code:
    $a = array('2.4','2.16.6','2.3.4','2.4.0.9');
    natsort($a);
    print_r($a); 
    Hinweis: die Schlüssel-Wert-Zuordnung wird hier beibehalten!

    Zu den Funktionen
    http://php.net/usort
    http://php.net/version_compare
    http://php.net/natsort
    Geändert von BugBuster (04.09.2014 um 08:35 Uhr)
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  6. #6
    Contao-Urgestein Avatar von ways2web
    Registriert seit
    23.03.2010.
    Ort
    Berlin
    Beiträge
    1.698
    User beschenken
    Wunschliste

    Standard

    ohweh...und ich war soooo dicht dran.. das kleine Beispiel hat mir dann die Augen geöffnet bei der Arbeitsweise.

    ich hab
    PHP-Code:
    $var usort($array,  'version_compare'
    gemacht... und $var wollte ich dann im foreach ausgeben... Dilettant.

    danke an euch beide!

    Update: usort lief nicht korrekt.. damit kam 2.10 am ende des Arrays, aber mit natsort ging es.
    Geändert von ways2web (04.09.2014 um 14:17 Uhr)

  7. #7
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.944

    Standard

    Zitat Zitat von ways2web Beitrag anzeigen
    Update: usort lief nicht korrekt.. damit kam 2.10 am ende des Arrays, aber mit natsort ging es.
    Ich habe eben folgendes getestet:

    PHP-Code:
    $versions = array("2.9.12","2.9.10","2.10.5","3.2.0","2.10");

    usort($versions"version_compare");

    print_r($versions); 
    Das ergibt

    Code:
    Array
    (
        [0] => 2.9.10
        [1] => 2.9.12
        [2] => 2.10
        [3] => 2.10.5
        [4] => 3.2.0
    )
    Das schaut doch aus, wie gewünscht.

  8. #8
    Contao-Urgestein Avatar von ways2web
    Registriert seit
    23.03.2010.
    Ort
    Berlin
    Beiträge
    1.698
    User beschenken
    Wunschliste

    Standard

    Frage mich nicht warum, das 2.10 am Ende kam. Mit natsort ging es ja zum Glück richtig

    gesendet mit Tapatalk.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •