Ben bir PHP birleşmeli dizinin serileştirme hakkında biraz kafam karıştı

4 Cevap php
a:3:{i:0;i:4;i:1;i:3;i:2;i:2;}

Birazdan bu boyutta 3 bir dizi olduğunu söylemek nerede olduğumu anahtar değer çiftleri 0->4, 1->3, ve 2->2?

Eğer öyleyse, ben bu temsili çok kafa karıştırıcı bulabilirsiniz. İlk başta, ben değerlerinin (veya içerdiği dizi {0, 4, 1, 3, 2, 2}) bir liste olduğunu düşündüm, ama ben anladım ki a:3: dizinin boyutu oldu. 3 büyüklüğündeydi ve eğer, sonra anahtarları ve değerleri açıkça hem kapalı saymadan bir anahtar / değer çiftini tanımlamanın hiçbir şekilde parantez içinde ortaya çıktı.

Ben geliyorum burada açıklığa kavuşturmak için:

Neden PHP geliştiricileri bu şekilde seri tercih ettiniz? Bu üzerinde var ne avantajı, en yol var_dump ve / veya var_export görüntüler verileri diyelim?

4 Cevap

$string="a:3:{i:0;i:4;i:1;i:3;i:2;i:2;}";
$array=unserialize($string);
print_r($array);

outpts:

Array
(
    [0] => 4
    [1] => 3
    [2] => 2
)

Nokta PHP tamsayı endeksli diziler ve dize endeksli hashtables arasında ayrım olmadığını düşünüyorsanız. Serileştirme formatında hashtables için tam olarak aynı şekilde kullanılabilir: a:<<size>>:{<<keytype>>:<<key>>;<<valuetype>>:<<value>>;...}

Biçimi (kaynakların hariç) tüm PHP değişken türlerini temsil etmek için ortak bir format sunmak için oldukça okunabilir insan olarak tasarlanmıştı ama değil gibi, ben temel değişken okuyarak yeniden olabilir çünkü verilen formatını kullanmak için daha basit olduğunu düşünüyorum karakteri ile dize karakter.

Evet o array(4, 3, 2)

a dizisi için, i anahtarı daha sonra değeri olarak tam sayı için. Belirli bir birine almak saymak olurdu, ama PHP her zaman sürü deserialises, bu yüzden yine de bir sayısı vardır.

Edit: buna alışmak zaman çok kafa karıştırıcı değil, ama örneğin göre biraz uzun soluklu olabilir JSON

Note: var_export() does not handle circular references as it would be close to impossible to generate parsable PHP code for that. If you want to do something with the full representation of an array or object, use serialize().

Bu bildiğim kadarıyla formatında bir hedef değildir - Tefrika PHP veri gerçekten insan okunabilir olması amaçlanmıştır değildir.

Ben biçim öyle şekilde görünüyor büyük nedeni kısalık olduğunu düşünüyorum, ve form da temellerinin işlenebilecek hangi hızına bağlı olabilir.

Neden daha önce olduğu nasıl verileri geri yüklemek için unserialize() fonksiyonunu kullanmak değil mi?