2011-12-03 25 views
5

PHPのisset()関数に奇妙な問題があります。 私に見せてください...。文字列をインデックスとして使用する文字列変数のPHP isset()

<?php 

$aTestArray = array(
    'index' => array(
     'index' => 'Główna' 
    ), 
    'dodaj' => 'Dodaj ogłoszenie', 
); 

var_dump(isset($aTestArray['index'])); 
var_dump(isset($aTestArray['index']['index'])); 
var_dump(isset($aTestArray['dodaj'])); 

var_dump(isset($aTestArray['index']['none'])); 
var_dump(isset($aTestArray['index']['none']['none2'])); 

// This unexpectedly returns TRUE 
var_dump(isset($aTestArray['dodaj']['none'])); 
var_dump(isset($aTestArray['dodaj']['none']['none2'])); 


?> 

のvar_dumpの返されます:

bool(true) 
bool(true) 
bool(true) 

bool(false) 
bool(false) 
bool(true) 
bool(false) 

をなぜ第六のvar_dump()がTRUEを返しますか?

答えて

12

文字列に[]演算子を使用する場合、整数値が必要です。それが得られなければ、それはそれを変換するでしょう。 ['none'][0]に変換され、お客様のケースではDになります。

+0

です。 PHPの最高の機能の1つは、文字列キーを許可しないことです。 '['none']'は有効なキー名です。 – Bojangles

+1

+1文字列に '[]'を使うと、配列コンポーネントとしてその文字にアクセスしようとしていることを説明すると良いでしょう。 –

+1

@JamWaffles絶対に!しかし、それは連想配列で作業するときです。この場合、名前付きキーをサポートしていない '' Dodajogłoszenie '[' none '] 'のようなことをしています。 –

1

$ aTestArray [ 'dodaj']は文字列であるため、だからPHPはCで書かれているので、それは次のとおりです。

$aTestArray['dodaj']['none'] 

var_dump((int) 'none') 
ため

$aTestArray['dodaj'][0] 

と同じです

は0

+0

この答えは、トムの答えに対する説明的なコメントに変更された場合、はるかに役立ちます。 –

関連する問題