5

私がこれを行う場合:

$new_arr = array(
0 => 'keyboard',
1 => 'mouse',
2 => 'computer'
);

print_r(json_encode($new_arr));

出力:

["キーボード"、 "マウス"、"コンピューター"]

しかし、データベースから「product」テーブルのすべての行をフェッチし、これを実行するとします。

$product_with_id_map = array();
foreach($query as $result) {
$product_with_id_map[$result->id] = $result->name;
}
print_r(json_encode($product_with_id_map));

出力:

{"0": "キーボード"、 "1": "マウス"、 "2":"コンピューター"}

私は本当に配列のキーを保持する必要があります。ijson_encodeも、最初の例で2番目の出力を実現する方法を教えてくれますか?

4

3 に答える 3

8

オプションを使用します(PHP 5.3以降):

print_r(json_encode($product_with_id_map, JSON_FORCE_OBJECT));
于 2012-09-24T09:40:05.950 に答える
6

配列をオブジェクトにキャストします。

$new_arr = array(
  0 => 'keyboard',
  1 => 'mouse',
  2 => 'computer'
);

print_r(json_encode((object)$new_arr));
// output: {"0":"keyboard","1":"mouse","2":"computer"}

追加: この結果をjavascriptで使用する場合は、配列を使用することをお勧めします。配列はjavascriptのオブジェクトでもあり、さらに、より多くのメソッドとlengthプロパティを提供します。

于 2012-09-24T09:38:39.683 に答える
3

これは、データベースから返されるインデックスが文字列として返され、JSONでもエンコードされているために発生します。自分で配列を作成するときは整数として設定しているので、無視されます。

あなたはどちらかを試すことができます

$new_arr = array(
'0' => 'keyboard',
'1' => 'mouse',
'2' => 'computer'
);

print_r(json_encode($new_arr));

または、配列を切り捨てて、インデックスを保持するオブジェクトにすることもできます。

print_r(json_encode((object)$new_arr));
于 2012-09-24T09:40:24.853 に答える