这是PHP中的错误吗?

时间:2012-07-10 14:53:19

标签: php

  

可能重复:
  php array behaving strangely with key value 07 & 08

我在PHP中发现了一些奇怪的东西,如果我使用数字数组,第8个数组会被忽略,这时我将'Cherry'放入$ fruit [08],php接缝来跳过它。

发生了什么事?这是一个错误还是别的什么。

<pre>
<?php

$fruit[01] = "Apples";
$fruit[02] = "Pears";
$fruit[03] = "Bananas";
$fruit[04] = "Grape";
$fruit[05] = "Orange";
$fruit[06] = "Peach";
$fruit[07] = "Lemon";
$fruit[08] = "Cherry";
$fruit[09] = "Mango";

print_r($fruit);

?>
</pre>

输出:

Array
(
    [1] => Apples
    [2] => Pears
    [3] => Bananas
    [4] => Grape
    [5] => Orange
    [6] => Peach
    [7] => Lemon
    [0] => Mango
)

8 个答案:

答案 0 :(得分:31)

由于前导零,您的索引被视为八进制数。

0809都将被评估为零,因此您的最后一个条目(“Mango”)最终会在数组索引0中结束。

答案 1 :(得分:7)

08被视为八进制。

不要使用前导零。

就此而言,不要使用显式索引来创建数组:

$fruit = array(
           "Apples",
           "Pears",
           etc
         );

(或PHP 5.4及更新版本):

$fruit = [
           "Apples",
           "Pears",
           etc
         ];

答案 2 :(得分:1)

因为你键入08而不是8 PHP认为你在谈论一个不存在的值。八进制数从00到07运行。要让PHP处理您键入的值:

<pre>
<?php

$fruit[] = "Apples";
$fruit[] = "Pears";
$fruit[] = "Bananas";
$fruit[] = "Grape";
$fruit[] = "Orange";
$fruit[] = "Peach";
$fruit[] = "Lemon";
$fruit[] = "Cherry";
$fruit[] = "Mango";

print_r($fruit);

?>
</pre>

简而言之,这不是一个错误,但如果你没想到的话,它就会让你感到害怕。

答案 3 :(得分:0)

您正在为数组索引使用八进制表示法。 09和09是无效的八进制数(八进制数为8,八进制表示为010,十进制为9,十进制表示为011)。无效的数字被评估为0,因此“Cherry”将被“Mango”覆盖。

答案 4 :(得分:0)

数字数组不需要前导零。如果这对您造成问题,请从索引中删除所有前导零。此外,您可以使用$array[]将元素附加到数组,而不是实际提供索引。

答案 5 :(得分:0)

当PHP以零开头时,PHP将整数视为八进制而不是小数。尝试使用适当的索引,例如1,2,3代替01,02,03。

BTW,在PHP数组中从0开始。

答案 6 :(得分:0)

PHP将数组索引视为八进制而不是十进制数,因为前导'0'。删除那些,一切都应该正常工作!

另外,您可能知道这一点,但是如果不这样做,数组索引从0开始,而不是1。

答案 7 :(得分:0)

这是因为您使用01,02,03等(前导零)。对于PHP,这些是八进制数。八进制数字的范围从0到7(因此08和09实际上是非法数字)。

削减前导零,一切都很好;)