Ankündigung

Einklappen
Keine Ankündigung bisher.

Nach bestimmten Key ein mehrdimensionales Array sortieren

Einklappen

Neue Werbung 2019

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

  • Nach bestimmten Key ein mehrdimensionales Array sortieren

    Hi

    ich habe ein mehrdimensionales Array, welches folgende Struktur hat:

    Code:
        [0] => Array
            (
                [frachtid] => 6
                [fahrzeug] => fracht
                [stellplaetze] => 8
                [abland] => D
                [abplz] => 74564
                [abort] => Crailsheim
                [abvon] => 1151222400
                [abbis] => 1151225100
                [anland] => D
                [anplz] => 74545
                [anort] => SHA - Michelfeld
                [anvon] => 1151280900
                [anbis] => 1151301600
            )
         [...]
    Dieses möchte ich jetzt sortieren lassen. Soweit klappt das auch:

    PHP-Code:
    <?php
      
    function cmp($a$b) {
        if(
    $a['abvon'] == $b['abvon']) {
          return 
    0;
        }
        return (
    $a['abvon'] > $b['abvon']) ? : -1;
      }

      
    usort($angsort"cmp");
    ?>
    Ich möchte aber, dass der User angeben kann, nach was sortiert werden kann. Kann ich das in eine Funktion irgendwie zusammenfassen?

    Weil bisher kam ich nur so weit, dass ich mehr cmp funktionen schreibe und dann eben mit if unterscheide:

    PHP-Code:
    <?php
      
    function cmp_abvon($a$b) {
        if(
    $a['abvon'] == $b['abvon']) {
          return 
    0;
        }
        return (
    $a['abvon'] > $b['abvon']) ? : -1;
      }

      function 
    cmp_abort($a$b) {
        if(
    $a['abort'] == $b['abort']) {
          return 
    0;
        }
        return (
    $a['abort'] > $b['abort']) ? : -1;
      }

      if(
    $_GET['sort'] == 'abort') {
        
    usort($angsort"cmp_"$_GET['sort']);
      }
    ?>
    Hab das nicht getestet, dürfte aber klappen. Das Problem, ich muss dann 12 funktionen ungefähr schreiben und dadurch viele Redundanzen.

    Wie würdet ihr das angehen? Danke für Tipps.

    (falls ich mich unklar ausdrückte, bitte sagt es )

    MFG
    [I]"Weaseling out of things is important to learn. It's what separates us from the animals ... except the weasel." (Homer J. Simpson)[/I]

  • #2
    Naja ... schreib dir ne Funktion die das macht wo du dir dein Feld mitgibst !!!

    Hast du dir schon mal die UserNotes auf Usort angeschaut .. Ich glaub da gabs was ...

    http://de2.php.net/manual/de/function.usort.php

    Kommentar


    • #3
      Stimmt, da hab ich noch gar nicht nachgesehn.

      Ich glaube, das hier sieht gut aus. Versuch ich gleich mal:

      Zitat von Manual
      For sort multi-array by specific index
      PHP-Code:
      <?php
      function cmp ($a$b)

       global 
      $w_o;
       if (
      $a[$w_o] == $b[$w_o]) return 0;
       return (
      $a[$w_o] < $b[$w_o]) ? -1;
      }
      # the index is the second element of
      # each row

      $w_o =1;
      usort($my_arry_info,"cmp");
      ?>
      Danke für den Tipp

      EDIT:

      klappt. Hier meine Funktion für die Nachwelt

      PHP-Code:
      <?php
        
      function cmp($a$b) {
          global 
      $sorttype;
          if(
      $sorttype == '') {
            if(
      $a['abvon'] == $b['abvon']) {
              return 
      0;
            }
            return (
      $a['abvon'] > $b['abvon']) ? : -1;
          } else {
            
      $index explode('_'$sorttype);
            if(
      $a[$index[0]] == $b[$index[0]]) {
              return 
      0;
            }
            if(
      $index[1] == 'auf') {
              return (
      $a[$index[0]] > $b[$index[0]]) ? : -1;
            } else {
              return (
      $a[$index[0]] < $b[$index[0]]) ? : -1;
            }
          }
        }
      ?>
      [I]"Weaseling out of things is important to learn. It's what separates us from the animals ... except the weasel." (Homer J. Simpson)[/I]

      Kommentar

      Lädt...
      X