PHP Array ve Hash farklar nelerdir?

3 Cevap php

Bir Array ve Hash PHP farklar nelerdir?

An array: array(1,2,3...)
A hash: array(key1=value1, key2=value2, ...)

farklı veya aynı?

Örneğin ※, dizi karma etkili olduğu fonksiyon argümanları izin verir mi?

Ben geleneksel dil ayırt ve kullanılan çünkü, ben şaşkın.

3 Cevap

Eğer açıklayan Hem şeyler diziler vardır. İkisi arasındaki tek fark, açıkça ikinci biri için tuşları ayarı vardır, ve gibi onlar associative arrays olarak bilinir olmasıdır. Eğer (Perl?) Gelen Hash terminolojiyi nereden aldı bilmiyorum ama onlar PHP olarak adlandırılır değil.

Yani, örneğin, bunu olsaydı:

$foo = array(1,2,3,4,5);
print_r($foo);

Çıktı olacaktır:

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

Gördüğünüz gibi, size koymak bireysel değerlerine erişmek için tuşları sizin için oluşturulan, ancak yine de vardır edildi. Yani bu dizi aslında, hem de çağrışım vardır. Dizinin diğer "tip" siz explcitily (yerine otomatik sayısal indeksler "Ben this tuşu ile this değerine erişmek istiyorum" diyorsun dışında, tam olarak aynı şekilde olmasına rağmen anahtar Verdiğiniz de) sayısal olabilir.

$bar = array('uno' => 'one', 'dos' => 'two');
print_r($bar);

Çıkışı olur:

Array
(
    [uno] => one
    [dos] => two
)

Eğer beklediğiniz gibi, print $bar['one'] olur çıkış uno yapıyor ve ilk örnek $foo[0] yapıyormuş çıkış 1.

Bildiğim kadarıyla fonksiyonları gitmek gibi, PHP fonksiyonları çoğu zaman iki dizi bu "tür" birini almak ve bunları istediğiniz ne, ancak bazı işlevler İndekslerinizin funky şeyler yapacak gibi farkında olmak ayrımlar vardır, olacaktır ve bazı olmayacaktır. Bu çıkış dizinin tuşları bağlı olarak ne olacağını not olacak gibi, bir dizi işlevi kullanmadan önce belgeleri okumak için en iyi genellikle.

Sen read the manual daha fazla bilgi için gerekir.

Gerçekte, php hiçbir diziler vardır - sadece ilişkisel diziler (temelde bir karma tablo olan) vardır

Bunu deneyin

$ar=array("zero","one","two","three","four");
unset($ar[3]);

Böylece diziden "üç" kaldırmak, ancak Dizi anahtarları (dizi birleştirici değil) aynı (0,1,2,4) kalacağını fark edeceksiniz - normal bir dilde bu anahtarı renumber olur 3 "dört" için.

Motor php içine tüm diziler (birleştirici veya ardışık) hash tabloları vardır ve tek bir elemanın okuma hızlı yöntemdir bu çünkü. İçten bir dizi oluşturmak ve popolate temel işlevleri vardır:

int zend_hash_init(HashTable *ht, uint nSize,hash_func_t pHashFunction, dtor_func_t pDestructor, zend_bool persistent);

int zend_hash_add(HashTable *ht, char *arrKey, uinit nKeySize, void *pData, uinit nDataSize, void **pDest)

int zend_hash_update(HashTable *ht, char *arrKey, uinit nKeySize, void *pData, uinit nDataSize, void **pDest)

int zend_hash_index_update(HashTable *ht, ulong h, void *pDate, uinit nDataSize, void **pDest)

int zend_hash_next_index_insert(HashTable *ht, void *pData, uinit nDataSize, void **pDest)

int zend_hash_add(HashTable *ht, char *arrKey, uinit nKeySize, void *pData, uinit nDataSize, void **pDest)

int zend_hash_update(HashTable *ht, char *arrKey, uinit nKeySize, void *pData, uinit nDataSize, void **pDest)

int zend_hash_index_update(HashTable *ht, ulong h, void *pDate, uinit nDataSize, void **pDest)

int zend_hash_next_index_insert(HashTable *ht, void *pData, uinit nDataSize, void **pDest)

......