Bir dizi dönen PHP json_decode elemanlarının sıralamasını korumak için garantili mi?

4 Cevap php

Yerine bir nesnenin bir dizi dönmek için json_decode için bir boolean iletebilirsiniz

json_decode('{"foo", "bar", "baz"}', true);  // array(0 => 'foo', 1 => 'bar', 2 => 'baz')

Benim soru budur. Nesne değişmezleri ayrıştırma, bu garanti öğeleri sipariş korunmuş olacak geliyor? Ben JSON nesne özellikleri sipariş değil biliyorum, ama PHP diziler vardır. Ben bu açıkça ele PHP kılavuzunda yerde bulamıyorum. Muhtemelen dikkatli tarafında err öder, ama "index" alt mülkiyet mümkünse çeşit dahil önlemek istiyorum.

4 Cevap

Eğer PHP JSON geçerken bir dizi kullanmak bu durumda daha mantıklı olmaz. Eğer (PHP ilişkisel dizi anahtarları haline) JSON herhangi bir nesne anahtarları yoksa, sadece bir dizi olarak göndermek. Eğer garantili olacak bu şekilde onlar javascript gibi PHP aynı sırayla olacaktır.

json_decode('{["foo", "bar", "baz"]}');
json_decode('["foo", "bar", "baz"]'); //I think this would work

Ilişkilendirilebilir diziler, geçen zaman onların düzenini korumak için bazı yolu ile gelmek zorunda kalacak (Eğer true olarak ikinci argüman geçirmeden neden olan) gerekir. Eğer bunu senin istediğin nasıl biçimlendirmek için deşifre sonra çıkan dizisindeki bazı post-processing yapmak zorunda gözetlemek olacak.

$json = '{[ {"key" : "val"}, {"key" : "val"} ]}';
json_decode($json, true);

Şahsen, ben bu düzenin özellikle tanımlanmadığı sürece kesin bir emir dönmek için herhangi bir sistem asla güvenmedim. Eğer gerçekten bir sipariş gerekiyorsa, o zaman 2dimension dizi aka bir sözlük kullanmak ve listedeki her değere bir yer değerini (0,1,2,3 ...) atanır.

Eğer her şeyi bu kuralı uygularsanız, bunu XML, JSON veya bir veritabanı olması, o dizinin teslimat / depolama konusunda endişelenmenize gerek asla.

Bir şey belli bir şekilde çalışmak olur sırf bu yüzden kasıtlı yapar anlamına gelmez, unutmayın. Eğer ORDER BY yan tümcesi kullanmak sürece aslında onlar değil zaman, bir düzen var, bir veritabanı satırları düşünmeye benzer bulunuyor. Bu ID 1 her zaman bir SELECT kimliği 2. önce gelir düşünmek güvensiz.

I () bazı kere json_decode kullandım ve sonuçlar sipariş PHP istemci uygulamaları ile sağlam tutuldu. Ama Python ile örneğin bir düzeni korumak değildir.

Cesurca bir yolu çoklu örnekler ile üzerinde test etmektir.

Ben tanımı gereği, derdim açık deyimi eksik, hiçbir açık sipariş korunacaktır.

Düşünce benim birincil hat hangi sırayla, tam olarak, bu bunu muhafaza olurdu? Json_decode işlevi argüman olarak bir string representation of a javascript object literal alır ve sonra bir nesneyi ya da bir dizi ya döndürür. Işlevin girişi (dize literal nesne) korumak için json_decode işlevi için açık bir düzen var demektir açık bir sıralama vardır.