ChrisB: Multideminsionales Array in eine Dimension

Beitrag lesen

Hi,

ist der index von
  ["12.11"] => 45
grösser oder kleiner als der index von
  ["12.2"] => 45

Was 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]