Hi,
ist der index von
["12.11"] => 45
grösser oder kleiner als der index von
["12.2"] => 45Was ist denn bei Deinem Versuch herausgekommen?
var_dump('12.11' > '12.2');
var_dump('12.11' < '12.2');
// ergibt:
bool(false)
bool(true)
Wie werden denn Literale in PHP auf Größe/Reihenfolge verglichen?
Offenbar so: „When both strings can be converted to the numerics (in ("$a" > "$b") test) then resulted numerics are used, else FULL strings are compared char-by-char”
Warum findet hier keine Typumwandlung statt?
Findet offenbar sehr wohl.
$x = array (
'12.11' => 'a',
'12.2' => 'b',
'9.45' => 'c',
'17.003' => 'd'
);
ksort($x);
print_r($x);
// resultiert in:
array(4) {
["9.45"]=>
string(1) "c"
["12.11"]=>
string(1) "a"
["12.2"]=>
string(1) "b"
["17.003"]=>
string(1) "d"
}
Das Manual verweißt bzgl. ksort auf die bei sort beschriebenen sort_flags;
allerdings wird auch bei ksort als Default SORT_REGULAR angegeben, „compare items normally (don't change types)” - obwohl offenbar *kein* richtiger String-Vergleich durchgeführt, sondern die aus obigem Nutzerkommentar zitierte Magie kommt auch hier zur Anwendung. Und dagegen wehren kann man sich wohl auch nicht, denn auch die explizite Angabe von SORT_REGULAR liefert das genannte Ergebnis - d.h., Sortierung von Keys nach deren Stringwerten lässt sich damit gar nicht erreichen.
MfG ChrisB
“Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]