我在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
)
答案 0 :(得分:31)
由于前导零,您的索引被视为八进制数。
08
和09
都将被评估为零,因此您的最后一个条目(“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实际上是非法数字)。
削减前导零,一切都很好;)