Schneider: Array sortieren

Hallo,

ich habe eine Frage bezüglich der Sortierung eines Arrays.
Folgende Situation ist gegeben:

  
<?php  
  
$arr = array("145", "154", "153", "13c", "163", "15a", "108E");  
  
sort($arr);  
  
var_dump($arr);  
  
?>  

Das Ergebnis ist wie erwartet:
"108E","13c","145","153","154","15a","163"

Eine Partnersoftware hingegen (mehr darf ich hier aus Verschwiegenheitsgründen nicht erwähnen) gibt mir als sortierte Rückgabe von $arr folgende Liste aus:

"13c","145","153","154","15a","163","108e"

Hat jemand eine Ahnung, mit welcher Funktion ich diese Sortierung erreiche?

Gruss
Schneider

  1. Hi,

    $arr = array("145", "154", "153", "13c", "163", "15a", "108E");

    "13c","145","153","154","15a","163","108e"

    Hat jemand eine Ahnung, mit welcher Funktion ich diese Sortierung erreiche?

    Welche Sortiervorschrift soll denn da überhaupt vorliegen?

    Die Zahlenwerte der Reihe nach zu Sortieren, würde ich noch nachvollziehbar finden - aber dann käme 15a weiter vorne, und auch 108e wäre nicht ganz hinten.

    sort mit dem Flag SORT_NUMERIC oder natcasesort würden schon mal die "Zahlen" in der gewünschten Reihenfolge sortieren - allerdings die Buchstaben dabei vollkommen unbeachtet lassen.

    Ich denke, hier kommst du nur mit einer selbstgeschriebenen Vergleichsfunktion weiter, die du als Callbackfunktion für usort nutzt.
    Und diese muss natürlich die Sortiervorschrift umsetzen - die noch exakter zu definieren bzw. zu ermitteln wäre.

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
    1. Hallo,

      Welche Sortiervorschrift soll denn da überhaupt vorliegen?

      das weiss ich leider nicht und kann ich auch nicht herausfinden. Diese Werte werden mir nur von dem Programm zurückgegeben. Ich kann weder über das System noch über den zugrundeliegenenden Algorithmus Auskunft geben.

      Das ist das Problem.

      Sort_Numeric habe ich schon probiert, ergibt leider auch nicht das gewünschte Ergebnis. Das einzige was ich weiss, dass das auswertende Programm in irgendeiner ASP-Umgebung läuft. Aber das hilft mir auch nix.

      Gruss
      Schneider

      1. Hi,

        Welche Sortiervorschrift soll denn da überhaupt vorliegen?

        das weiss ich leider nicht und kann ich auch nicht herausfinden. Diese Werte werden mir nur von dem Programm zurückgegeben. Ich kann weder über das System noch über den zugrundeliegenenden Algorithmus Auskunft geben.

        Das ist das Problem.

        Tja, dann kannst du auch nicht "wie XY sortieren", wenn du nicht weisst, wie XY sortiert :-)

        Du könntest höchstens quantitativ Testdaten analysieren, und versuchen, daraus ein Muster abzuleiten. Mit Glück "passt" deine daraus erstellte Sortierung dann immer - und mich Pech gibt es einen Wert, der in deinen Testdaten nicht enthalten war, und den XY aber immer ganz an den Anfang/Ende packt o.ä., einfach weil es dort so definiert wurde ...

        Aus welchem Grund stellt sich denn überhaupt die Anforderung, die Sortierung irgendeines Tools zu imitieren?

        MfG ChrisB

        --
        Light travels faster than sound - that's why most people appear bright until you hear them speak.
        1. Hi,

          Tja, dann kannst du auch nicht "wie XY sortieren", wenn du nicht weisst, wie XY sortiert :-)

          eben

          Du könntest höchstens quantitativ Testdaten analysieren, und versuchen, daraus ein Muster abzuleiten. Mit Glück "passt" deine daraus erstellte Sortierung dann immer - und mich Pech gibt es einen Wert, der in deinen Testdaten nicht enthalten war, und den XY aber immer ganz an den Anfang/Ende packt o.ä., einfach weil es dort so definiert wurde ...

          leider ja

          Aus welchem Grund stellt sich denn überhaupt die Anforderung, die Sortierung irgendeines Tools zu imitieren?

          ich übergebe eine Werteliste, sagen wir ("4a","13","12"). Daraufhin bekomme ich pro Wert eine xml-Ergebnisliste zurück, z.b.

            
          <ergebnisse>  
          <ergebnis>  
          <ergebniswert1>bla</ergebniswert1>  
          <ergebniswert2>blub<ergebniswert2>  
          </ergebnis>  
            
          <ergebnis>  
          <ergebniswert1>bla</ergebniswert1>  
          <ergebniswert2>blub<ergebniswert2>  
          </ergebnis>  
            
          <ergebnis>  
          <ergebniswert1>bla</ergebniswert1>  
          <ergebniswert2>blub<ergebniswert2>  
          </ergebnis>  
            
          </ergebnisse>  
            
          
          

          Nun sind diese Ergebnisse aber nicht in der Reihenfolge, wie ich sie übergeben habe, sondern so sortiert, wie ich es oben genannt habe. (Das habe ich durch Überprüfung der Wert herausgefunden, eine Referenzierung oder ähnliches, worauf ich mich beziehen könnte, gibt es leider auch nicht.)

          Ich bin also darauf angewiesen, der Reihenfolge, so wie sie ankommt, zu vertrauen. Und dazu muss ich wissen, wie die übergebene Liste sortiert wird.

          Dumm, was?

          Gruss
          Schneider

          1. Hi,

            Nun sind diese Ergebnisse aber nicht in der Reihenfolge, wie ich sie übergeben habe, sondern so sortiert, wie ich es oben genannt habe. (Das habe ich durch Überprüfung der Wert herausgefunden, eine Referenzierung oder ähnliches, worauf ich mich beziehen könnte, gibt es leider auch nicht.)

            Ich bin also darauf angewiesen, der Reihenfolge, so wie sie ankommt, zu vertrauen.

            Wenn die Reihenfolge der zurückgelieferten Daten von Bedeutung ist, und keinerlei Werte enthalten sind, der eine Referenzierung erlauben - dann erfüllt die "Partnersoftware" wohl nicht die Anforderungen.

            Da bleibt dir also wohl nur, sie zu reklamieren, bzw. um (ggf. kostenpflichtige) Nachrüstung entsprechender Funktionalität zu bitten, sonfern dies nicht von vorherein als Leistungsmerkmal definiert war.

            Und dazu muss ich wissen, wie die übergebene Liste sortiert wird.

            Oder du fragst nach der Beschreibung der Sortiervorschrift.

            MfG ChrisB

            --
            Light travels faster than sound - that's why most people appear bright until you hear them speak.
            1. Wenn die Reihenfolge der zurückgelieferten Daten von Bedeutung ist, und »» keinerlei Werte enthalten sind, der eine Referenzierung erlauben - dann »»erfüllt die "Partnersoftware" wohl nicht die Anforderungen.

              :)
              Es ist so, dass diese Software darauf ausgelegt ist, einzelne Anfragen zurückzuliefern. Listen sind zwar laut (spärlichster) Dokumentation (auf spanisch) möglich, aber wie die sich das vorstellen, weiss ich nicht.

              Oder du fragst nach der Beschreibung der Sortiervorschrift.

              das wird wohl der einzige gangbare Weg sein, wie es scheint.

              Danke trotzdem

              Schneider

    2. Hallo,

      »» $arr = array("145", "154", "153", "13c", "163", "15a", "108E");
      »» "13c","145","153","154","15a","163","108e"
      Welche Sortiervorschrift soll denn da überhaupt vorliegen?

      es sieht so aus, als interpretiere die fragliche Software die Strings alle als Hexadezimalzahlen. Unter dieser Voraussetzung ist das eine ganz sture numerisch aufsteigende Sortierung.

      Irritierend ist dabei nur, dass die Eingabedaten alle als Strings vorliegen.

      Ich denke, hier kommst du nur mit einer selbstgeschriebenen Vergleichsfunktion weiter, die du als Callbackfunktion für usort nutzt.

      Wenn er nicht einfach hexdec() dafür einsetzen möchte.

      Und diese muss natürlich die Sortiervorschrift umsetzen - die noch exakter zu definieren bzw. zu ermitteln wäre.

      Ich habe auch nur geraten, was mir offensichtlich erschien.

      So long,
       Martin

      --
      Ich wollt', ich wär ein Teppich.
      Dann könnte ich morgens liegenbleiben.
      1. Irritierend ist dabei nur, dass die Eingabedaten alle als Strings vorliegen.

        Bei den Werten handelt es sich um spezielle Codes, die als String vorliegen. Einige von ihnen heissen zb. "DFA". Mit Hexadezimal hat das nichts zu tun. Wenn natürlich das Programm diese Codes wirklich als Hexadezimal interpretiert (was völliger Qutasch wäre, die codes könnten auch "blabla" heissen), dann würde vielleicht die Sortierung einen Sinn ergeben.

        Danke schonmal für die Idee

  2. Hello,

    hast Du Dir schon natsort() angeschaut?
    http://de3.php.net/manual/en/function.natsort.php

    Vielleicht bringt Dich das deinem Ziel ein Stück näher?

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de