Arrays verknüpft sortieren...

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

  • Arrays verknüpft sortieren...

    Hallo. Eins vorweg: Ich hab php learning by doing gelernt, deshalb sind einige probleme vielleicht sehr newbielastig weil ich einfach nur den richtigen befehl nicht finde....



    Aber nun zu meinem Problem:
    Ich muß immer noch mein Script optimieren und nun hakt es. Ich habe stark meine Sortierung in verdacht extrem langsam zu sein. Ich verwende das gute(?) alte Bubbelsort um 2 Arrays zu sortieren:

    PHP-Code:
       // einfaches BubbleSort:
       
    for ($aussen=0;$aussen<=count($array)-1;$aussen++) {
          for (
    $innen=$aussen+1;$innen<=count($array)-2;$innen++) {
             if (
    $array[$aussen]<$array[$innen]) {
                
    $tmpV=$array[$innen];
                
    $tmpS=$str[$innen];
                
    $array[$innen]=$array[$aussen];
                
    $str[$innen]=$str[$aussen];
                
    $array[$aussen]=$tmpV;
                
    $str[$aussen]=$tmpS;
             }
          }
       } 
    is wohl nichts geheimnisvolles drin. Zur erklärung der beiden Arrays:
    in $array stehen Zahlenwerte, nach denen ich sortieren möchte, in $str stehen Strings die den entsprechenden Zahlen zugeordnet sind. Wenn ich also $Array mittels
    PHP-Code:
    sort($array
    sortiere geht die zuordnung zu $str flöten.

    Also um es kurz zu machen suche ich eine Möglichkeit $array schnell zu sortieren, ohne die "Verknüpfung" zu $str zu verlieren.
    Hoffe habe mich halbwegs klar ausgedrückt.

    möglichst natürlich mit den Boardmitteln von PHP, will schließlich nicht gleich ne eigne Hash-Tabelle programmieren


    Danke im voraus

  • #2
    Wenn du in deinem Array $str Bezugswerte hast, dann nimm doch einfach diese Werte als Index des anderen Arrays.
    Geht natürlich nur, wenn deine Bezugswerte in $str eindeutig sind.
    Dann läßt sich das Ganze mit asort() wunderbar sortieren und es bleibt alles außer der Sortierung erhalten.
    So in der Art etwa:
    PHP-Code:
    <?
    $array["Bezug 1"] = "Orangen";
    $array["Bezug 2"] = "Birnen";
    $array["Bezug 3"] = "Zitronen";
    $array["Bezug 4"] = "Kartoffeln";
    asort($array);
    while (list($i,$wert)=each($array)) echo "$i => $wert<br>";
    reset($array);
    ?>
    Ausgabe dieses Beispiels:
    [FONT=courier]
    Bezug 2 => Birnen
    Bezug 4 => Kartoffeln
    Bezug 1 => Orangen
    Bezug 3 => Zitronen[/FONT]
    Immer erst mal gucken, ob Benzin im Tank ist ...

    Kommentar


    • #3
      wenn der Bezug nicht eindeutig ist: erstelle ein zweidimensionales Array
      $array = array(
      array (1, 'Wert 1'),
      array (3, 'Wert 3a'),
      array (3, 'Wert 3b'),
      array (2, 'Wert 2')
      );

      definiere eine Vergleichsfunktion:
      function mycmp($a, $b)
      {
      return $b[0]-$a[0];
      }

      und sortiere das ganze mit usort($array, 'mycmp');

      Wenn die Bezüge eine maximale Länge haben, gibt es auch noch die Alternative, sie in Strings vor die Werte zu stellen und einfach mit sort zu sortieren:
      $array = array('001Wert 1', '003Wert 3a', '003Wert 3b', '002Wert 2');
      sort ($array);
      mein Sport: mein Frühstück: meine Arbeit:

      Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

      Kommentar

      Lädt...
      X