mark: usort mit variablem key

Hallo zusammen. Ich benutze in meinem Script die usort Funktion und wende diese auf ein multidimensionales Array an.

function cmp($a, $b){  
     return strcasecmp($a["key"], $b["key"]);  
}  
  
usort($arr, "cmp");

Gibt es eine Möglichkeit key ( in $a["key"]) variabel zu gestalten ohne gleich GLOBALS zu verwenden ? Bzw. was ist der standard - Weg um so etwas zu realisieren ?

mfg
mark

  1. Hi,

    function cmp($a, $b){

    return strcasecmp($a["key"], $b["key"]);
    }

    usort($arr, "cmp");

    
    >   
    >   
    > Gibt es eine Möglichkeit key ( in $a["key"]) variabel zu gestalten ohne gleich GLOBALS zu verwenden ?  
      
    Ab PHP 5.3.0 kann man das mit [anonymen Funktionen und Closures](http://www.php.net/manual/en/functions.anonymous.php) machen.  
      
    Ansonsten geht's auch mit einem kleinen Objekt, welches die Vergleichsfunktion als Methode und den zusätzlich benötigten Wert als Eigenschaft (die man vorher entsprechend setzt) hat.  
      
    MfG ChrisB  
      
    
    -- 
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
    
    1. Ab PHP 5.3.0 kann man das mit anonymen Funktionen und Closures machen.

      Ansonsten geht's auch mit einem kleinen Objekt, welches die Vergleichsfunktion als Methode und den zusätzlich benötigten Wert als Eigenschaft (die man vorher entsprechend setzt) hat.

      MfG ChrisB

      Vielen Dank für deine Hilfe! Da muss ich mich wohl oder übel wieder mit Objekten beschäftigen ... werd meine Lösung dann hier posten.

      1. Hab für mich folgende Lösung gefunden :

        function usort_comparison($obj, $method, $key) {  
            $usorter = &new Usort($obj, $method, $key);  
            return array($usorter, "sort");  
        }  
          
        class Usort {  
            function __construct($obj, $method, $key) {  
                $this->obj = $obj;  
                $this->method = $method;  
                $this->key = $key;  
          
            }  
          
            function sort($a, $b) {  
                return call_user_func_array(array($this->obj, $this->method), array($a, $b, $this->key));  
            }  
          
            function cmp_by_name($a, $b, $key) {  
                 return strcasecmp($a[$key], $b[$key]);  
            }  
        }  
          
        // Funktions Aufruf :  
        usort($srtarr, usort_comparison("Usort", $meth, $key));