Php dizi seyrek json nesnesi Decode

3 Cevap php

Ben komutunu kullanarak seyrek php dizi (veya harita) oluşturabilirsiniz:

$myarray = array(10=>'hi','test20'=>'howdy');

JSON olarak bu serisini / seri hale getirmek istiyoruz. Ben komutunu kullanarak serialize:

$json = json_encode($myarray);

hangi dizesinde sonuçlanır {"10":"hi","test20":"howdy"}. Ancak, ben bu serisini ve komutunu kullanarak bir dizi için cast zaman:

$mynewarray = (array)json_decode($json);

Ben geçerli php tanımlayıcılar değildi tuşları ile herhangi bir eşleştirmeleri kaybedecek gibi görünüyor. Bu mynewarray 'test20'=>'howdy' eşleme vardır ancak 10=>'hi' ne '10'=>'hi' vardır.

Standardını json_encode / json_decode fonksiyonları kullanarak json ve geri dönüştürme sırasında bir php harita sayısal anahtarlarını korumak için bir yolu var mı?

(PHP Versiyon 5.2.10-2ubuntu6.4 kullanıyorum.)

3 Cevap

json_decode varsayılan tip stdClass bir nesne döndürür. Siz özellikleri olarak üyelere erişmek (yani $result->test20). 10 bunu kaybediyorsun neden olan bir özellik için geçerli bir ad değil.

Bunun yerine bir dizi döküm, sen json_decode bir ilişkisel dizi kendisi dönmek yapmak için ikinci bir argüman olarak true iletebilirsiniz:

$mynewarray = json_decode($json, true);

Eğer $mynewarray[10] cezası çalışacağını, bunu yaparsan.

PHP sürümü nedir? 5.2 aşağıdaki program / script

$myarray = array(10=>'hi','test20'=>'howdy');
$json = json_encode($myarray);
$mynewarray = (array) json_decode($json);
var_dump($mynewarray);

Çıkışlar

array(2) {
  ["10"]=>
  string(2) "hi"
  ["test20"]=>
  string(5) "howdy"
}

Senin tarif ettiğin davranış göstermez Hangi.

PHP sürümünüz JSON miscasting eğer söyledi, döner json_decode stdClass nesne üzerinde get_object_vars kullanmayı deneyin

get_object_vars(json_decode($json))

Bu daha iyi sonuçlar verebilir.

Sorun, nesneden dizisine dönüştürme bulunmaktadır.

$a = (array)json_decode('{"10":"hi","test20":"howdy"}');
var_dump($a);

//outputs
array(2) {
  ["10"]=>
     string(2) "hi"
  ["test20"]=>
     string(5) "howdy"
}

Bu dizi indeksi nasıl görmek "10"? Ama PHP, bir dizi gibi görünüyor her şey, özellikle dizi endeksler, bir dizi haline dönüştürülmüş olur. Bir sayıya "10" dönüştürür ve bu dizi böyle bir dizin yok çünkü sadece a["10"] alınamıyor.

Bununla birlikte, foreach çalışır.

foreach ($a as $key => $value) {
   var_dump($key);
   var_dump($value);
}

//outputs
string(2) "10"
string(2) "hi"
string(6) "test20"
string(5) "howdy"

Ayrıca bir nesne olarak json_decode sonucunu tedavi edebilir. Eğer $a->10 veya $a->"10" yapmak mümkün olmayacak olsa da,

$a = json_decode('{"10":"hi","test20":"howdy"}');
$b = 10;
var_dump($a->$b);

//outputs
string(2) "hi"

çalışır.

Chris dedi Ama büyük olasılıkla, sadece ikinci bir argüman olarak true geçmek istiyorum.

$a = json_decode('{"10":"hi","test20":"howdy"}', true);
var_dump($a[10]);

//outputs
string(2) "hi"