PHP关联数组意外行为 - 为什么?

时间:2018-05-12 00:33:49

标签: php type-conversion integer octal zero-padding

以下是我在一大堆PHP代码中使用的关联数组,它使用来自SQL数据库的数据创建有组织的性能日期和信息表。代码似乎没有问题(对我而言),但在网页加载时没有正常运行(某些日期没有出现)。

$months = array(
    01 => 'January',
    02 => 'February',
    03 => 'March',
    04 => 'April',
    05 => 'May',
    06 => 'June',
    07 => 'July',
    08 => 'August',
    09 => 'September',
    10 => 'October',
    11 => 'November',
    12 => 'December',
);

当我运行'var_dump'时,输出如下:

array(11) {
    [1]=> string(7) "January" 
    [2]=> string(8) "February" 
    [3]=> string(5) "March" 
    [4]=> string(5) "April" 
    [5]=> string(3) "May" 
    [6]=> string(4) "June" 
    [7]=> string(4) "July" 
    [0]=> string(9) "September" 
    [10]=> string(7) "October" 
    [11]=> string(8) "November" 
    [12]=> string(8) "December" }

“八月”的整行缺失,“九月”的关键现在为[0]。

有人可以解释我的代码中的错误位置吗?

免责声明:我已经通过从前九个键中删除前导零来解决问题,但我很困惑为什么它很重要?提前感谢任何解释。

1 个答案:

答案 0 :(得分:2)

08和09是无效的八进制文字...所以你需要做的是:

  1. 将您的密钥命名为正确的整数(不带0前缀)
  2. 或者,将您的密钥用作字符串,就像您提到的那样" associative array"问题,您的数组应该是这样的:
  3. <?php
    $months = array(
        "01" => 'January',
        "02" => 'February',
        "03" => 'March',
        "04" => 'April',
        "05" => 'May',
        "06" => 'June',
        "07" => 'July',
        "08" => 'August',
        "09" => 'September',
        "10" => 'October',
        "11" => 'November',
        "12" => 'December',
    );
    

    抱歉想发表评论,但不能在这里新用户