2

可能重复:
php 数组在键值 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
)
4

8 回答 8

31

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

08并且09都将被评估为零,因此您的最后一个条目(“Mango”)以数组索引 0 结束。

于 2012-07-10T14:55:08.040 回答
7

08被视为八进制。

不要使用前导零。

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

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

(或 PHP 5.4 及更新版本):

$fruit = [
           "Apples",
           "Pears",
           etc
         ];
于 2012-07-10T14:55:30.067 回答
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>

简而言之,它不是一个错误,但如果你没有预料到它,它就是那些会让你失望的东西之一。

于 2012-07-10T15:00:32.497 回答
0

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

此外,您可能很清楚这一点,但万一您不知道,数组索引从 0 开始,而不是 1。

于 2012-07-10T14:59:15.633 回答
0

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

切掉前导零,一切都很好;)

于 2012-07-10T15:00:23.017 回答
0

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

于 2012-07-10T14:55:48.007 回答
0

数值数组不需要前导零。如果这给您带来了问题,请从索引中删除所有前导零。$array[]此外,您可以使用而不是实际给出索引将元素附加到数组。

于 2012-07-10T14:55:48.987 回答
0

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

顺便说一句,在 PHP 数组中从 0 开始。

于 2012-07-10T14:55:53.350 回答