2013-03-08 14 views
8

Bir diziden json kodlanmış dizesi oluşturmak için json_encode kullanarak bir sorun yaşıyorum.PHP json_encode dizisi ile sorun 0 anahtar

söz konusu dizinin bölümünde bu

RatingDistribution (Array, 11 elements) 
    0 (Array, 1 element) 
     0 (String, 3 characters) 4.5 
    1 (Array, 1 element) 
     1 (String, 4 characters) 11.9 
    2 (Array, 1 element) 

benziyor Ama dizede bu üretir

:

"RatingDistribution":[["4.5"],{"1":"11.9"}, 

bu beklenir:

"RatingDistribution":[{"0":"4.5"},{"1":"11.9"}, 

Tüm I' Bunu yapmak:

$result = json_encode($array); 

Hata yaptım mı yoksa 0 anahtarın mevcut olduğundan emin olmak için daha fazla koda ihtiyacım var mı?

alkış Andy

+1

Eğer php kodunu gönderebilir? veya dizi print_r? Aramanız yanlış gibi görünüyor. –

+0

Sanırım, ikinci elemanın (indeks 1) üstündeyim, çünkü alt dizisi 1 olarak başlar ve böylece bir dize anahtarı olarak yorumlanır. – TFennis

cevap

-1

Cou strval ya da (string), örneğin bir dizeye dizi anahtar döküm deneyebilir.

+1

Bu yorum olmalı! – sandip

+1

Bu benim ilk düşüncemdi ama hiçbir şey yapmıyordu, bunu tırnak içine alıyor ama çok dağınık hale getiriyor Json :) –

14

Beklediğiniz sonuç beklenmelidir; json_encode, dizide yalnızca sayısal tuşlar kullandığınızı algılar, bu nedenle JSON'ta bir nesne yerine bir diziye dönüştürür. Çoğu zaman, tam olarak yapmak istediğin şey bu. nedense Bunu yapmazsanız

(? neden), PHP> = 5.3 İstediğiniz çıktıyı almak için JSON_FORCE_OBJECT bayrağını kullanabilirsiniz:

$result = json_encode($array, JSON_FORCE_OBJECT); 
+0

davranış biraz garip, örneğin ilk değer tüm sonraki değerlerin nesneler olacağı bir diziye kod çözecek . –

+0

JSON_FORCE_OBJECT –

+0

@ user2147830'u kullanmamız gerektiğinden şüpheleniyorum: Gerçekten tek IMHO değil. İkinci dizinin ilk anahtarı "0" değildir; bu, "Tamam, bu bir ilişkilendirici dizidir" seçeneğinin belirlenmesi için yeterlidir. – Jon

1

Eğer json dizileri kullanmak istiyorsanız daha sonra JSON_FORCE_OBJECT parametresi yerine diziye nesneyi atayabilirsiniz.

Sorun:

json_encode([0 => [1,2,3]]); // Return: [[1,2,3]] 
json_encode(["0" => [1,2,3]]); // Return: [[1,2,3]] 
json_encode([1 => [1,2,3]]); // Return: {"1":[1,2,3]} 

değil biz beklediğiniz:

json_encode([0 => [1,2,3]], JSON_FORCE_OBJECT); // Return: {"0":{"0":1,"1":2,"2":3}} 

Çözüm: dizi nereden

json_encode((object)[0 => [1,2,3]]); // Return: {"0":[1,2,3]} 
json_encode(new \ArrayObject([0 => [1,2,3]])); // Return: {"0":[1,2,3]}