質問

私は単純な配列を持っています:

array
  0 => string 'Kum' (length=3)
  1 => string 'Kumpel' (length=6)

私は、私は次の取得json_encode()を使用して配列をエンコードする場合:

["Kum","Kumpel"] 

私の質問ではなく["Kum","Kumpel"]{ "0" : "Kum", "1" : "Kumpel" }を取得するための理由が何であるか、ですか?

役に立ちましたか?

解決

「{}」ブラケットは、オブジェクトを指定し、「[]」JSON仕様に従ってアレイのために使用されます。あなたはメモリ割り当ての観点から見れば配列は、列挙を持っていません。それは、より多くのデータに続くデータだけだが、一方のオブジェクトは、名前の特性を有し、データは、したがって、あなたも正しいプロパティ名を渡す必要があり、そのようなオブジェクトをコード化するために、プロパティに割り当てられます。 1、データの順序で唯一の問題 - nは、配列の長さである場合、彼らは常に、0..Nされますので、しかし、配列のために、あなたは、インデックスを指定する必要はありません。

$array = array("a","b","c");
json_encode($array); // ["a","b","c"]
json_encode($array, JSON_FORCE_OBJECT); // {"0":"a", "1":"b","2":"c"}
何のプロパティ名は、開発者(データのみ)によって与えられていないので、あなたは、プロパティに割り当てる必要がありますobejectするデータを割り当てることがあるため、

JSON_FORCE_OBJECTは、それが「0,1,2」を使用するfoces理由があるエンコーダは、配列を使用していますプロパティ名としてインデックス、それらは理にかなって名前だけですので。

注:オプションパラメータはPHP 5.3からのみ利用可能ですこの PHPマニュアルに従って

の古いPHPバージョンの場合は、索引を使用するjson_encodeを作るための方法についてchelmertzの回答を参照してください。

他のヒント

ガンボは、JS側にそれは問題ではないだろう、言ったように。それにPHPを強制するには、これを試してください:

$a = new stdClass();
$a->{0} = "Kum";
$a->{1} = "Kumpel";
echo json_encode($a);

は使用できません、私は、配列表記法に固執すると思います。

ただ、オブジェクトとしてキャストし、それがうまく... JSON_FORCE_OBJECTパラメータはまったく同じことをしていきます。

json_encode((object)$array);

あなたがPHPでその値にアクセスできるようにバックPHPの配列に変換することを忘れないでください。

$array = (object)$array;
$array = (array)$array;

json_encode($array);

は、あなただけの数字キーとPHPの配列を抱えているので、JavaScriptのオブジェクトを使用する必要はありません。しかし、あなたは1が必要な場合は、Maiku森の提案を試してみます。

私は個人的にこれはPHPで修正される必要があるバグだと思います。 JSON_FORCE_OBJECTは絶対に答えではありません。あなたは常にアップトリップしますジェネリックプログラミングの任意の並べ替えを行うにしよう。たとえば、次は、有効なPHPです。

アレイ( "0" =>アレイ(0,1,2,3)、 "1" =>アレイ(4,5,6,7));

に変換する必要があります

{ "0":[0,1,2,3]、 "1":[4,5,6,7]}

しかし、PHPは私が受け入れることのいずれか期待しています。

[0,1,2,3]、[4,5,6,7]

または

{ "0":{ "0":1、 "1":1、 "2":2、 "3":3}、 "1":{ "0":4 "1":5 "2":6、 "3":7}}

これは、いずれも右ですべてです。どのように私はおそらくそのようなオブジェクトをデコードすることができますか?可能性は何の理由は、これまで明確にインデックスとして文字列を使用している何かを変更することがありますか?これは、PHPがint型から文字列を区別することはできませんばかげた人々を助けるために巧妙になろうとしていたようだが、プロセスにかかわらず、値がになって何ができるかの合法的指標として文字列を使用して、誰が、めちゃめちゃます。

scroll top