PHP未定义的偏移数组

时间:2013-09-04 09:54:31

标签: php arrays undefined offset

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

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

如果我在$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];

?>

5 个答案:

答案 0 :(得分:9)

$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不是有效的十进制数。

答案 1 :(得分:5)

在数字前加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]值

答案 2 :(得分:2)

试试这个,

echo $monthArray['08'];

或     echo $ monthArray [08];

您使用的密钥似乎不同

答案 3 :(得分:0)

这是一个键值数组,因此您需要访问键08而不是8:

这有效:

echo $monthArray[08];

答案 4 :(得分:0)

撰写echo $monthArray[08];代替echo $monthArray[8];