2016-08-24 7 views
1

から変換した後、私は配列としてJSONを持つようにしたい場合は、本当のように第二引数でjson_decodeコールする方が良いことを知っているが、PHPはarrayに型キャストstdClassを可能にし、この問題が起こる:array_key_existsはstdClass

<?php 
$array = (array) json_decode('{"1":"1","2":"1","3":"1","4":"1","12":"1"}'); 
var_dump($array); 
var_dump(array_key_exists('12', $array)); 

そして、その結果は次のようになります。

array(5) { 
    ["1"]=> 
    string(1) "1" 
    ["2"]=> 
    string(1) "1" 
    ["3"]=> 
    string(1) "1" 
    ["4"]=> 
    string(1) "1" 
    ["12"]=> 
    string(1) "1" 
} 
bool(false) 

また、私が作るしようとすると:

$array['12'] = 'X'; 

'12'はINTに型キャストされるため、var_dumping時には配列に12と12のキーがあります。誰も知っている理由は? 、私はちょうどここにボンネットの下に何が起こるかを知りたい、私は本当にこのことを知っていると理解し、より良いPHPがどのように機能するかを理解するために、なぜ私は(いけない -


私はjson_decode(..., true)を使用する必要があることを言わないでください)オブジェクトを配列に型キャストしないでください。

+0

http://stackoverflow.com/questions/4345554/convert-php-object-to-associative-array –

答えて

0

有効な整数である数字キーは、自動的にPHPで整数としてキャストされます。 manualから

は:

キーは、整数または文字列のいずれかとすることができます。値はどのタイプでもかまいません。 ...有効な整数を含む文字列は、整数型にキャストされます。例えば。キー「8」は実際には8の下に格納されます。一方、「08」は有効な10進整数ではないため、キャストされません。

+0

のvar_dump(array_key_exists(12、$配列))。 falseを返します。 $ array ['12 '] =' X 'を作成する場合。 2つの '12'キーが配列されています。 – gnysek

+0

マニュアルは間違っていません。オブジェクトをキャストして結果が通常の配列のように動作することを期待するオブジェクトレッスンとしてこれを実行します。配列が必要な場合は、 'json_decode()'で適切なパラメータを使用してください。 – reformed

関連する問題