Seite 1 von 1

Frage zu Arraykeys

Verfasst: 12.11.2007 01:28
von cYbercOsmOnauT
Folgendes kleines Script sei gegeben:

Code: Alles auswählen

<?php
$a = array();
$b = '12';
$a[$b] = $b;
var_dump($a);
?>
Heraus kommt:

Code: Alles auswählen

array(1) {
  [12]=>
  string(2) "12"
}
Wie das Kennerauge sofort sieht, ist der Key als Integer und der Wert als String gespeichert. Ich jedoch möchte das der Key, auch wenn er nur aus Ziffern besteht, einen Stringwert beinhaltet. PHP scheint das beim Setzen des Keys intern in Integer umzuwandeln falls eine reine Zahl bekommt. Versuche mit strval(), "$b" oder (string) oder gar ganz verrückte Sachen wie str_replace('a', '', "a$b") schlugen fehl.

Hat jemand noch eine andere Idee oder muss ich mit einem Integer Keywert leben?

(Bitte jetzt keine "Wozu brauchste das denn?" Postings. Ich brauch es halt.)

Grüße,
Tekin

Verfasst: 12.11.2007 08:19
von PhilippK
Dazu sagt php.net:
A key may be either an integer or a string. If a key is the standard representation of an integer, it will be interpreted as such (i.e. "8" will be interpreted as 8, while "08" will be interpreted as "08"). Floats in key are truncated to integer. There are no different indexed and associative array types in PHP; there is only one array type, which can both contain integer and string indices.
Also wirst du damit leben müssen.

Gruß, Philipp

Verfasst: 12.11.2007 11:01
von cYbercOsmOnauT
Das ist gelinde gesagt großer Mist.. ich hab ein Array das mit 01 02 03 anfängt und mit 10 11 12 ... weitergeht als Arraykeys.. die Keys vergleiche ich typensicher mit einem anderen Wert. Dies geht natürlich nicht wenn die ersten 9 Keys Strings sind und der Rest Integer. Also muss ein Workaround her. -würg-

Danke für das Quote Philipp.

Verfasst: 12.11.2007 11:46
von PhilippK
Den Key einfach grundsätzlich in 'nen String umwandeln?

Gruß, Philipp

Verfasst: 12.11.2007 12:19
von cYbercOsmOnauT
Geht ja leider nicht, weil PHP intern den Key als Integer nutzt sobald er nur aus Ziffern besteht und eine echte Zahl darstellt (also ohne beginnende 0 ganz links, siehe Deinen Quote).