Lieber molily,
Wenn du bei uksort den Schlüssel hast, kommst du doch einfach an den Wert…?
das setzt voraus, dass die Callback-Funktion irgendwie auf das zu sortierende Array zugreifen kann. Das kann sie aber nicht, da ich nicht mit globalen Variablen arbeite und das Array im Kontext einer Funktion als lokale Variable (und nicht als Eigenschaft eines Objektes) auftritt. Die Vergleichsfunktion (Callback) bekommt nur zwei Elemente übermittelt, entweder Werte (uasort), oder Schlüssel (uksort).
Beispiel:
class WhatEver {
public function cb ($a, $b) {
// kein Zugriff auf $sort_me!
if (is_string($a) && is_string($b)) {
return strnatcasecmp($a, $b);
}
return 0;
}
public function hook ($param) {
$t = $this;
$a = $t->do_whatever();
// more code here
}
private function do_whatever () {
$t = $this;
$sort_me = array(
'x' => '',
'm' => array(),
'f' => array(),
'g' => ''
);
uasort($sort_me, array($t, 'cb')); // cb erhält Schlüssel (Strings)
uksort($sort_me, array($t, 'cb')); // cb erhält Werte (Leerstrings und Arrays)
return $sort_me;
}
}
Durch den Aufruf von *sort-Funktionen wird das übergebene Array selbst verändert, anstatt es so zu belassen und das sortierte Array als Rückgabewert zu liefern. Ich mag diese Inkonsistenz in PHP nicht besonders, dass es Funktionen gibt, die als Rückgabewert die ausgeführte Operation liefern, während andere nur eine boolsche Rückmeldung über (Miß)Erfolg liefern... Gerade bei den Array-Sortierfunktionen wäre es mir wesentlich lieber gewesen, man hätte das Argument nicht verändert und dafür das Ergebnis als Rückgabewert erhalten. Bei den Stringfunktionen erhalte ich ja auch den veränderten String als Rückgabewert, anstatt dieses komischen Bool-Wertes. o_O
Liebe Grüße,
Felix Riesterer.
ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)