Nasıl birleşmeli diziler PHP uygulanmaktadır?

5 Cevap php

Birisi PHP ilişkisel dizilerin uygular nasıl açıklayabilir? Ne temel veri yapısı PHP kullanıyor? PHP Hash haritası çeşit anahtarı ve saklamak mı? Ben merak ediyordum çünkü ben merak ediyorum ne ekleme ve tuşları arıyor ilişkilendirilebilir dizilerin performansı.

5 Cevap

It's a hash table. The type declaration and hashing function are here:
http://svn.php.net/viewvc/php/php-src/trunk/Zend/zend_hash.h?view=markup

SPL içinde hafif bir dizi ve bir bağlantılı liste (standart php lib) vardır

Peki, bu değer ne için, all PHP diziler ilişkilendirilebilir diziler vardır.

@ EBGreen doğru.

Bir liste olarak bir dizi tedavi ve [] (dizi add) operatörünü kullanarak, özellikle bazı ilginç performans sorunları verir. PHP bunun yerine bir sonraki sayısal tuş ne olması gerektiğini bulmak için tüm tuşları hareket gibi görünüyor, en büyük sayısal tuşa önbelleğe ve ona bir tane eklemek için görünmüyor. Çünkü PHP'nin kasvetli dizi-as-a-list performans Python komut yazılabilir ettik.

Ilişkilendirilebilir diziler standart dict / karma performans yükü var.

It's all hash tables, according to sources in various web forums: http://www.usenet-forums.com/php-language/15348-zend-engine-array-implementation.html

Eğer emin olmak istiyorsanız, kaynağı okuyun, sonra derlemek, ama emin olun yapabilirsiniz trust your compiler (Uyarı: PDF, ve ilgisiz, ama çok güzel).

Yüksek cevabı bağlantısı kopuk ve o kadar açıklama vermez olarak.

PHP C ile yazılmış ve altta yatan yapı, sadece bir C dizidir. C diziler bellek sadece parçalar vardır. C dizilerde endeksleri sürekli olmalıdır, sen ondan sonra gelen bir dizin 0 ve bir dizin 1000 olamaz. Onlar C diziye eklenir önce ilişkisel dizi anahtarları, iş yapmak için, onlar bir karma işlevi aracılığıyla uygun C endekslerine dönüştürülür.

Tam bir açıklama için, ben çok daha bilgilendirici olması için bu bağlantı bulundu.

http://nikic.github.io/2012/03/28/Understanding-PHPs-internal-array-implementation.html