1

JSON を配列として使用する場合は、2 番目の引数を true にして json_decode を呼び出す方がよいことはわかっていますが、PHP で への型キャストstdClassを許可するarrayと、次のような問題が発生します。

<?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' が配列に含まれます。理由を知っている人はいますか?


使用する必要があるとは言わないでくださいjson_decode(..., true)-私はこれを本当に知っており、理解しています.PHPがどのように機能するか、およびオブジェクトを配列に型キャストすることを避けるべき(避けるべき)理由をよりよく理解するために、ここで何が起こっているのかを知りたいだけです.

4

1 に答える 1

0

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

マニュアルから:

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

于 2016-08-24T11:14:55.857 に答える