我写了一年中所有月份的数组如下:
$MNTH["01"] = "January";
$MNTH["02"] = "February";
$MNTH["03"] = "March";
$MNTH["04"] = "April";
$MNTH["05"] = "May";
$MNTH["06"] = "June";
$MNTH["07"] = "July";
$MNTH["08"] = "August";
$MNTH["09"] = "September";
$MNTH["10"] = "October";
$MNTH["11"] = "November";
$MNTH["12"] = "December";
当我使用$MNTH
对var_dump(array_keys($MNTH))
的键进行变量转储时,
我明白了:
array(12) {
[0]=> string(2) "01"
[1]=> string(2) "02"
[2]=> string(2) "03"
[3]=> string(2) "04"
[4]=> string(2) "05"
[5]=> string(2) "06"
[6]=> string(2) "07"
[7]=> string(2) "08"
[8]=> string(2) "09"
[9]=> int(10)
[10]=> int(11)
[11]=> int(12) }
我期待最后三个键的字符串。它是如何变成整数的?我该怎么做才能纠正这种现象?
答案 0 :(得分:6)
PHP在您创建数组元素时将数字键转换为整数。这不是array_keys
。但是有一个hack来获取字符串数字键:
$a = new stdClass;
$a->{"0"} = "zero";
$a = (array) $a;
var_dump($a);
输出:
array(1) {
["0"]=>
string(4) "zero"
}
但是您无法通过下标访问该密钥,因此它不是很有用。
如果你必须有字符串键,你需要在它们前面添加另一个非数字(或零)字符:
$MNTH["001"] = "January";
$MNTH["012"] = "December";
键可以是整数或字符串。如果一个键是整数的标准表示,它将被解释为这样(即“8”将被解释为8,而“08”将被解释为“08”)。键中的浮点数被截断为整数。索引和关联数组类型在PHP中是相同的类型,它们都可以包含整数和字符串索引。
答案 1 :(得分:0)
PHP根据上下文确定变量的类型,因此10,11,12被视为整数。 如果你想强制它们成为字符串,你可以像这样强制转换为字符串
$MNTH[(string)"11"] = "November";
或连接一个空字符串。
$MNTH["11".""] = "November";
答案 2 :(得分:0)
你为什么不做一个关联数组?
$MNTH = array(
array("01" => "January"),array("02"=>"February"),array("03"=>"March"),
... snip ...
array("12"=>"December")
);