"Iştirak" Arasındaki Farklar Pratik nelerdir

5 Cevap php

PHP dizi türü aslında geleneksel bir C dizi daha bir sıralı bir harita daha yakındır. Bu PHP'nin orijinal genel kullanım veri yapısı bulunuyor. Manuel söylemek kadar gider The indexed and associative array types are the same type in PHP, which can both contain integer and string indices.

Ancak, yerleşik dil özellikleri "endeksli" dizileri (sıralı, tamsayı tuşları ile diziler) ve "ilişkisel" dizileri ile (diziler sıralı olmayan ve / veya karışık tipte anahtarlar) arasında bir ayrım yapacak durumlarda bir çok şey var.

Bunun bir örneği, array_merge fonksiyonudur.

Giriş diziler aynı dize anahtarlarını varsa, o anahtarın sonra değeri eskisinin üzerine yazılır. Ancak, diziler sayısal tuşları içeriyorsa, daha sonra değeri özgün değeri üzerine yazmaz, ancak eklenecektir.

Yalnızca bir dizi verilir ve dizi sayısal endeksli ise, anahtarlar sürekli şekilde reindexed olsun.

Bir ayrım indisli ve ilişkisel diziler arasında yapılır PHP diğer yerler nelerdir? PHP'nin kaynağı Dizi uygulamaya herhangi bir fikir de ilginç olurdu, ancak ben, Userland farklılıkları özellikle ilgileniyorum.

5 Cevap

Akla gelen en yaygın tek bir ilişkisel bir (o sayısal dizin yok çünkü) değil ise bir dizinlenmiş dizi, geleneksel for döngü kullanarak üzerine kurulabilmesi olmasıdır:

for ($i = 0; $i < count($indexed_array); $i++)
{
  // do something with $indexed_array[$i]
}

Tabii ki, php de her iki tür aynı çalışan bir foreach anahtar kelime vardır.

Aslında, herhangi bir dizi endeksli veya ilişkilendirilebilir eğer olursa olsun, bir hashtable (artı öğelerin sırasını korumak için bir çift-bağlantılı liste) PHP olduğunu. Ancak, userland PHP kodu, endeksli ve ilişkisel diziler hemen hemen her zaman sort / asort aralarında bir ayrım yapmak, farklı amaçlara hizmet ve bazen farklı şekillerde gibi çok çeşitli işlevleri tedavi edilmesi gerekir sadece kolaylık için.

.. Ve ardından SplFixedArray, 5.3 'den başlayarak, bu, sadece tam sayı dizinleri destekler boyutunu sabit olan ve genellikle daha yerli dizilerin daha var.

Ben buldum ilginç bir fark kullanırken olan json_encode.

json_encode(array(0=>0,1=>1,2=>2));
> [0,1,2]
json_encode(array(0=>0,2=>2));
> {"0":0,"2":2}

Yalnız bir örnek olarak bu mantıklı, ama array_filter, diyelim ki, birlikte zaman çok daha şaşırtıcı.

$f = function($x) { return $x != 1; };
json_encode(array_filter(array(0,1,2), $f));
> {"0":0,"2":2}

Biz, sayısal bir dizi ile başladı bazı unsurları dışarı süzüldü, ancak elde edilen json bir ilişkisel dizidir!


Biz array_values kullanarak istenen json alabilirsiniz unutmayın.

json_encode(array_values(array_filter(array(0,1,2),$f)));
> [0,2]

Hemen hemen tüm (anahtar dernek korumak isteyen ve böylece bağlı olarak tüm sort, ksort, asort varyasyonları ile) temel sıralama işlevleri.