键中的字符串成为整数?

时间:2011-10-29 05:18:12

标签: php

我写了一年中所有月份的数组如下:

$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";

当我使用$MNTHvar_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) }

我期待最后三个键的字符串。它是如何变成整数的?我该怎么做才能纠正这种现象?

3 个答案:

答案 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";

来自documentation

  

键可以是整数或字符串。如果一个键是整数的标准表示,它将被解释为这样(即“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")
             );