【问题标题】:PHP Associative Array Unexpected Behavior -- WHY? [duplicate]PHP 关联数组的意外行为——为什么? [复制]
【发布时间】:2018-10-22 10:22:31
【问题描述】:

以下是我在一段 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" }

'August' 的整行缺失,'September' 的键现在是 [0]。

谁能解释我的代码中的错误在哪里?

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

【问题讨论】:

  • @Nick 很棒的发现。那是一模一样的副本。
  • @mickmackusa 我一直在关注“这是...的副本”链接! :)
  • 对了。那么,很高兴得到帮助。
  • @mickmackusa 感谢您的编辑并指出答案。作为一名业余编码员,我没有使用八进制数,只有十进制、十六进制和二进制;我不知道导致它被解释为八进制的前导零!
  • 当然。对于不熟悉很少使用的八进制数的人来说,这是一个偷偷摸摸的调试事件。编码愉快。

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


【解决方案1】:

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

  1. 将您的键命名为适当的整数(不带 0 前缀)
  2. 或者,将您的键用作字符串,就像您提到的“关联数组”一样,您的数组应该是这样的:
<?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',
);

抱歉想评论但不能评论,这里是新用户

【讨论】:

  • 这是对问题的回答(正确的)。这不应该是评论,所以不需要道歉。
猜你喜欢
  • 2010-12-03
  • 1970-01-01
  • 2014-08-17
  • 2021-04-20
  • 2021-05-01
  • 2018-06-29
  • 2020-08-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多