2012-02-29 5 views
7

PHP'de dizi tuşları için bir çeşit sınırlama varsa? Uzunluk? Kabul edilemez dizeler?PHP ilişkisel dizinin anahtarları (dizinler) sınırlamaları?

Yalnızca official documentation numaralı telefonda bulunan bu anahtarlar, sınırlamalarla ilgili bilgi yok.

Bir anahtar, bir tamsayı veya bir dize olabilir. Bir anahtar, bir tamsayıya ait standart gösterim ise, bu şekilde yorumlanacaktır (yani "8", 8 olarak yorumlanacak, "08" ise "08" olarak yorumlanacaktır). Anahtar içinde yüzenler tamsayıya kesilir. endeksli ve ilişkili dizi her ikisi de integer ve dize indeksleri içerebilir PHP aynı tip vardır. *

cevap

4

What is the max key size for an array in PHP?

Bu soru hemen hemen aynı olduğunu. Ama gayri resmi bir şeye güvenmek istemezseniz, sadece daha az küçük anahtarlar kullanmayın. Hatta bazı performans avantajları alabilirsiniz.

DÜZENLEME

: Ve The PHP Manual olarak der ki:

Not: Bir dizgenin çok büyük olması etmesi sorun teşkil etmez. PHP bir dizenin büyüklüğüne sınır koymaz; tek sınır PHP'nin çalıştığı bilgisayarın kullanılabilir hafızasıdır ..

+0

harika Sesler .. bu yardımcı olur

umut .. değerler sadece genel olarak dizilerde bir yağma almalı ve hangi veri türleri izin falan vardır. Bazı özel veri işlemleri için uzun anahtarlara ihtiyacım var, bu yüzden performans, sadece işlevsellik sorunu yok. "Yasak" karakterlerin olup olmadığını kontrol etmeniz gerekiyor, sorunun ikinci kısmı. –

+1

Dizelerin yasaklanmış karakterleri yok. Ancak dizgelerde ters eğik çizgiden haberdar olun/bir sonraki harften kaçacaktır. – MichaelH

+1

PHP belgelerinde "uzun dizeler için sorun yok" notu için bir ek. Bu, bir dizideki uzun tuşların, performans veya başka nedenlerden dolayı bir sorun olmadığı anlamına gelmez. Bu doğru olabilir, ancak bu alıntı not böyle demez. – matteo

9

Bir dizide anahtar olarak kullanılan tüm dizeler karmadır. Md5() ve sha1() yöntemlerine benzer şekilde, bu sağlama, bilinen bir boyuta (potansiyel olarak gigabayt) karakterleri azaltır. md5() veya sha1() öğesinin aksine, dizinin dahili karma mekanizması, dizginizi dizinin içindeki bir kovayı adreslemek için kullanabileceği bir tam sayıya dönüştürür. PHP dizileri gerçek/gerçek diziler değildir - bunlar bir çeşit Bağlantılı Hashme'yi dahili olarak içerir. Birden çok dizenin aynı kareye sığabileceği düşünüldüğünde, her bir kepçe bir listenin kendisidir. Aynı kova içinde birden çok öğe varsa, her anahtarın değerlendirilmesi gerekir. Kısa tuşların 1MB'lık metinlerden daha hızlı karşılaştırıldığını söylemeden gider.

TL; DR: PHP ile sınırlı olmasa da, kendinizi sınırlandırmalısınız. Oldukça uzun dizeleriniz varsa, anahtar uzunluğunu azaltmak için bunları md5() veya sha1() (veya başka bir karma işleviyle) aracılığıyla çalıştırmayı düşünün.

+0

Anahtarın içsel olarak karışmadığı, keşif için teşekkürler. Gerçekten, anahtar uzunluğunu azaltmak için ek bir md5 yapmak iyi bir fikirdir. –

+2

Kendinle çelişmiyor musun? Eğer dizeler dahili olarak içeri çekilirse, neden "oldukça uzun" bir dizeye sahip olmalısınız? Unismin teorik güvencesini kaybedeceğinizden bahsetmemek gerekir (bundan dolayı ne yaparsınız? Bütün veri yapısını, listeleri vb. Ile yeniden icat ediyor musunuz?) TL'niz; DR bölümünüz ilk paragrafla çelişiyor gibi görünüyor ve hiçbir sebep görmüyorum. arkasında. – matteo

-2

Anahtardan bahsedeceğinize emin misiniz? ya da değer mi demek istiyorsun? ilişkilendirilebilir dizilerle

: $ dizi = yeni diziye ( yeni dizi ( "anahtar" => "değer" ) );

.. orada ancak uzunluğuna herhangi bir sınırlama var uzunlukta anahtarları seçilmesi .. gelince

sen onları çok reusre isteyeceksiniz eğer iyi bir fikir değildir .. i Theorie düşünüyorum anahtarının olarak