2017-02-08 7 views
0

明白なQ & Aを解決したくないという人は、次のようなことが起こる理由を誰かが知っているのだろうかと思います。PHP String Indexing 'error'

私は特定の位置に「1」または「0」の

テスト「1011100001111」の値を持つ文字列変数$文字列を持っている:

$string[00] => '1' // correct 
$string[01] => '0' // correct 
$string[07] => '0' // correct 
$string[08] => '1' // should be '0' 
$string[ 8] => '0' // correct 

それは見つけるために私にしばらく時間がかかりました接頭辞ゼロを使用するときのエラー、明らかに私はそれらを取り除きましたが、なぜインデックス8は8と異なっていますか? 07までは動作することに注意してください! documentationに関する整数から

+1

正しく覚えていれば、「08」を使用すると10進数ではなくその数値の16進数が使用されます。だからあなたはそれがどこにあるかを見ていない。 – aynber

+5

[***オクタル表記を使用するには、数字の前に0(ゼロ)を付けます。**数字を0xで始めるには、16進表記を使用します。バイナリ表記を使用するには、数字の前に0b。*](http://php.net/manual/en/language.types.integer.php) –

+1

@WiktorStribiżewああ、8進数ではなく、16進数ではありません。それをクリアしていただきありがとうございます。 :-D – aynber

答えて

5

To use octal notation, precede the number with a 0 (zero)

ので08は、整数8、したがって、あなたが期待するインデックスを返さないではありません。これは無効な8進数で、0に解決されます。

+1

しかし良いニュースがあります。 PHP7では、解析エラーが発生します – RiggsFolly

+0

これをクリアしていただきありがとうございます。私が008を使用すると結果が何であるか不思議に思う。私は試してみる。 –

0

数値の前に0を付けると、それらは8進数と見なされます。したがって、00から07までは0-7の小数に相当します。しかし、08は8進数では存在しませんので、0になります。