Mailinglisten-Archive |
Hi Ringo,
Am Samstag, 30. September 2006 00:37 schrieb Ringo Großer:
> Ich war mir nicht ganz sicher. Gelesen hatte ich den Satz im Handbuch
> auch. Also es funktioniert mit eindeutigen Strings als assoziative
> Schlüssel. In meinem Beispiel $cars verwende ich solche, daher
> klappts dort.
> In meiner eigentlichen Anwendung hatte ich aber IDs als Schlüssel
> verwendet, die nur als Zahlen bestanden.
der Testaufbau sollte eben immer den genauen Sachverhalt
widerspiegeln. :-)
> Trotzdem hatte ich
> angenommen, dass PHP irgendwie den Unterschied zwischen einem
> $array[177] und einem $array['177'] mitbekommt. Aber leider geht PHP
> ja sehr locker mit Typen von Variablen um.
Dieser lockere Umgang mit Variablentypen ist ja das eine, aber der
Hammer ist in diesem Fall, daß PHP die explizite Typenfestlegung
schlicht und einfach ignoriert! Selbst wenn ich folgende Schreibweisen
versuche, ist der Elementschlüssel dann vom Typ Integer:
$aArray[''.'0'] = 'Audi';
$aArray[(string) '1'] = 'BMW';
$aArray[strval('2')] = 'Honda';
Vielleicht gibt es ja einen guten Grund dafür, aber für mich wäre es
zunächst mal ein Bug.
> Jedenfalls gingen diese IDs bei mir verloren. Ich habs nun mit einem
> Workaround gelöst und bin beim nächsten Mal schlauer.
Naja, was heißt Workaround... :-) Also auch wenn das oben aus meiner
Sicht ein Bug ist, ist es ja immer noch so, daß Du als Zeichenketten
formatierte Zahlen nur dann numerisch sortieren kannst, wenn Du die
Zeichenketten alle auf dieselbe Länge bringst, indem Du sie mit
führenden Nullen auffüllst (str_pad()), wobei wichtig ist, daß auch die
größte Schlüsselzahl eine führende Null erhält. Ein Beispiel:
$aArray['000'] = 'Audi';
$aArray['001'] = 'BMW';
$aArray['002'] = 'Honda';
$aArray['003'] = 'Mazda';
$aArray['004'] = 'Mercedes';
$aArray['005'] = 'Nissan';
$aArray['006'] = 'Opel';
$aArray['007'] = 'Peugeot';
$aArray['008'] = 'Renault';
$aArray['009'] = 'Toyota';
$aArray['010'] = 'VW';
Wenn Du den Schlüssel dann mal als Zahl brauchst, bekommst Du diese
schnell mit intval() oder durch Multiplikation mit 1. :-)
Viele Grüße
Lutz
php::bar PHP Wiki - Listenarchive