2012-09-24 16 views
5

私はこれを行う場合は、次の異なる結果()PHP

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

print_r(json_encode($new_arr)); 

出力:

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

しかし、私のデータベースから "製品"テーブルのすべての行を取得し、私はこれを行うと言う:

$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": "コンピュータ"} Iは実際の鍵を保持する必要

配列私はjson_encodeまた、第1の例では、2番目の出力を達成する方法を教えてくれますか?

+1

ちょうど私はあなたの質問を正しく受け取ります:第2の出力形式は希望ですか? – vzwick

+0

はい、正確に私のjson_encodeに配列キーを保持したい –

+2

* "本当にjson_encodeのときに配列のキーを保持する必要があります。"両方の例でキーは同じです。しかし、最初の配列は配列であり、もう1つは完全に数字で構成されるプロパティキーを持つオブジェクトです。このJSONをデコードする言語がJavaScriptなら、それは非常に微妙な違いです(配列キーはJavaScriptの文字列です - [はい、実際](http://blog.niftysnippets.org/2011/01/myth-of-arrays)。 html))。他の言語は異なる場合があります。 –

答えて

6

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

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

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

Addtion: あなたはJavaScriptでこの結果を使用している場合は、私はあなたが、配列を使用することをお勧め、配列は、それはあなたに多くのメソッドとlengthプロパティを提供し、加えて、JavaScriptでもオブジェクトです。

+0

はい、完璧に機能します。なぜ私は別の結果を得ましたか教えてください。 –

+0

@ user1537158 - 配列がJSONのオブジェクトと異なるためです。 – vzwick

+0

@xdazz:配列をオブジェクトに変換する必要はありません。 json_encodeの出力にはキーを含めることができます。これは、インクリメンタルな数値シーケンスを使用して配列を作成するため、json_encodeの出力でキーが省略されているためです。そのjson_encoded文字列を配列に変換すると、実際には効果はありません。キーはインクリメンタルシーケンスに戻ります。キー「1」を「4」に変更し、json_encodeの出力 –

8

はオプション(since PHP 5.3)を使用します:データベースから返されるインデックスが文字列として戻って来ているので、あまりにもJSONでエンコードされているため

print_r(json_encode($product_with_id_map, JSON_FORCE_OBJECT)); 
2

これが起こっています。どこで自分で配列を作成するかは、整数として設定しているので無視されます。

あなたは

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

print_r(json_encode($new_arr)); 

を試みることができるいずれか、またはあなたは、インデックスを保持しますオブジェクトに配列をTRUNことができます。

print_r(json_encode((object)$new_arr)); 
+0

あなたの最初のコードは機能しませんが、配列をキャストしない限り違いはありませんオブジェクト。 – xdazz