2

重複の可能性:
php 配列がキー値 07 & 08 で奇妙な動作をする

PHP で奇妙なことを発見しました。数値配列を使用すると、8 番目の配列が無視されます。ここで $fruit[08] に 'Cherry' を入力すると、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

先行ゼロのため、インデックスは 8 進数として扱われています。

08どちらもゼロとして評価さ09れるため、最後のエントリ (「Mango」) は配列インデックス 0 になります。

于 2012-07-10T14:55:08.040 に答える
7

088 進数として扱われます。

先行ゼロを使用しないでください。

さらに言えば、配列を作成するために明示的なインデックスを使用しないでください。

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

(または PHP 5.4 以降の場合):

$fruit = [
           "Apples",
           "Pears",
           etc
         ];
于 2012-07-10T14:55:30.067 に答える
1

8 ではなく 08 と入力したため、PHP は存在しない値について話していると見なします。8 進数は 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>

要するに、これはバグではありませんが、予期していなかった場合に気付く可能性のあるものの 1 つです。

于 2012-07-10T15:00:32.497 に答える
0

PHP は、先行する「0」のために、配列インデックスを 10 進数ではなく 8 進数として扱います。それらを削除すると、すべて正常に動作するはずです!

また、これはよくご存じかもしれませんが、念のため、配列のインデックスは 1 ではなく 0 から始まります。

于 2012-07-10T14:59:15.633 に答える
0

これは、01、02、03 など (先行ゼロ) を使用しているためです。PHP の場合、これらは 8 進数です。また、8 進数の範囲は 0 ~ 7 です (つまり、08 と 09 は実際には不正な数値です)。

先頭のゼロをカットすれば、すべて問題ありません;)

于 2012-07-10T15:00:23.017 に答える
0

配列インデックスに 8 進数表記を使用しています。09 と 09 は無効な 8 進数です (10 進数の 8 は 8 進数表記の 010、10 進数の 9 は 8 進数表記の 011 です)。無効な数値は 0 と評価されるため、"Cherry" は "Mango" で上書きされます。

于 2012-07-10T14:55:48.007 に答える
0

数値配列には先行ゼロは必要ありません。これが問題を引き起こしている場合は、インデックスから先頭のゼロをすべて削除してください。$array[]また、実際にインデックスを指定する代わりに、要素を配列に追加することもできます。

于 2012-07-10T14:55:48.987 に答える
0

PHP は、ゼロで始まる整数を 10 進数ではなく 8 進数として扱います。01、02、03 の代わりに 1、2、3 など、適切なインデックスを使用してみてください。

ところで、PHP の配列は 0 から始まります。

于 2012-07-10T14:55:53.350 に答える