【问题标题】:PHP undefined offset array [closed]PHP未定义的偏移数组[关闭]
【发布时间】:2013-09-04 09:54:31
【问题描述】:

我正在尝试使用和数组来打印出月份名称的前三个字母(我知道我可以使用 date() 来做到这一点,但我正在学习 PHP 中的数组,这似乎最简单)。 每次我运行底部的代码时,我都会收到下面的错误代码。

注意:未定义的偏移量:C:\Documents and Settings\Garry\My Documents\Dropbox\htdocs\Web-Apps\Locander2\Alpha\step2.php 第 17 行中的 8

只有在$monthArray[] 的索引部分输入 8 或 9 时才会出现此问题。

<?php

$monthArray = array(01 => "Jan",
                    02 => "Feb",
                    03 => "Mar",
                    04 => "Apr",
                    05 => "May",
                    06 => "Jun",
                    07 => "Jul",
                    08 => "Aug",
                    09 => "Sep",
                    10 => "Oct",
                    11 => "Nov",
                    12 => "Dec"
                    );

    echo $monthArray[8];

?>

【问题讨论】:

  • 删除 0 或调用 echo $monthArray[08];
  • 你对每个号码都试过了吗? :)
  • 对于所有echo $monthArray[08]; 的回答,请在发布之前尝试您的代码。这将回显“Sep”而不是“Aug”。他在数组键中使用 0 做错了。向他解释为什么他不应该脱口而出你甚至没有花时间测试的东西。

标签: php arrays undefined offset


【解决方案1】:
$monthArray = array(1 => "Jan",
                    2 => "Feb",
                    3 => "Mar",
                    4 => "Apr",
                    5 => "May",
                    6 => "Jun",
                    7 => "Jul",
                    8 => "Aug",
                    9 => "Sep",
                    10 => "Oct",
                    11 => "Nov",
                    12 => "Dec"
                    );

删除 1-9 之间索引处的零 (0)。因为 01 或 02 不是有效的十进制数。

【讨论】:

  • @JeremyD 因为索引缩写为8,而不是像他那样留下'08'。
  • 它起作用了,因为 PHP 会将前导 0 的整数解释为八进制。 01-07 一切正常,因为它们在十进制和八进制中是相同的。
  • 解释为什么最好删除前导 0 而不是引用索引 [08]。 (提示:混合指数)
  • 为它工作的每个人干杯。我以为我已经尝试过了,但是当我尝试它时,我一定错过了 CTRL+S。还要感谢您添加 Elon Than,我不明白为什么有些不工作而有些不工作。
【解决方案2】:

在数字前添加 0 意味着 PHP 将其解析为八进制值,就像在前面添加 0x 会导致将其解析为十六进制值一样。去掉零,就可以正常工作了。

echo 07; // prints 7
echo 010; // prints 8

这主要在指定unix权限时使用:

chmod("myfile", 0660);

除此之外,它很少是你想做的事情。

这在PHP Manual 中有描述。

<?php

$monthArray = array(
                    00 => "Jan",
                    01 => "Jan",
                    02 => "Feb",
                    03 => "Mar",
                    04 => "Apr",
                    05 => "May",
                    06 => "Jun",
                    07 => "Jul",
                    08 => "Aug",
                    09 => "Sep",
                    10 => "Oct",
                    11 => "Nov",
                    12 => "Dec"
                    );

    echo $monthArray[0];
    echo "<pre>";
    var_dump($monthArray);

?>

输出:

Sep

array(11) {
  [0]=>
  string(3) "Sep"
  [1]=>
  string(3) "Jan"
  [2]=>
  string(3) "Feb"
  [3]=>
  string(3) "Mar"
  [4]=>
  string(3) "Apr"
  [5]=>
  string(3) "May"
  [6]=>
  string(3) "Jun"
  [7]=>
  string(3) "Jul"
  [10]=>
  string(3) "Oct"
  [11]=>
  string(3) "Nov"
  [12]=>
  string(3) "Dec"
}

因为 08 和 09 被转换成八进制。他们的价值被置于 数组中的 $monthArray[00] 值

【讨论】:

    【解决方案3】:

    试试这个,

    echo $monthArray['08'];
    

    或 回声 $monthArray[08];

    好像你用的钥匙不一样

    【讨论】:

      【解决方案4】:

      这是一个key-value数组,所以需要访问key 08而不是8:

      这行得通:

      echo $monthArray[08];
      

      【讨论】:

      • 没有。这将与 9 月而不是 8 月相呼应。
      • 对不起,你是对的。我忘记了 0x 数字被视为八进制数。
      【解决方案5】:

      echo $monthArray[08];而不是echo $monthArray[8];

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多