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