Ben ilişkilendirilebilir diziler üreten yaşıyorum ve anahtar değeri bir dize 1 concatı .. n sütun olduğunu.
Beni ısırmak için geri gelecek tuşları için maksimum uzunluğu var mı? Eğer öyleyse, muhtemelen durdurmak ve farklı yapacağım.
PHP dize büyüklüğü için pratik bir sınır yoktur. Göre the manual,
Note: It is no problem for a string to become very large. PHP imposes no boundary on the size of a string; the only limit is the available memory of the computer on which PHP is running.
Dizeleri büyük olsun bu sıra dizilerde dizeleri anahtar olarak kullanan, ancak PHP onun aramalarını nasıl işleyeceğini bağlı olarak geçerli olacağını varsaymak güvenlidir, bir performans isabet fark edebilirsiniz.
Zend_hash.h olarak, PHP anahtar dize karma nasıl gösterebilir zend_inline_hash_func()
yöntemi bulmak, Yani 8 karakterden daha az performans için daha iyi dize uzunluğu tuşunu kullanabilirsiniz.
static inline ulong zend_inline_hash_func(char *arKey, uint nKeyLength) {
register ulong hash = 5381;
/* variant with the hash unrolled eight times */
for (; nKeyLength >= 8; nKeyLength -= 8) {
hash = ((hash << 5) + hash) + *arKey++;
hash = ((hash << 5) + hash) + *arKey++;
hash = ((hash << 5) + hash) + *arKey++;
hash = ((hash << 5) + hash) + *arKey++;
hash = ((hash << 5) + hash) + *arKey++;
hash = ((hash << 5) + hash) + *arKey++;
hash = ((hash << 5) + hash) + *arKey++;
hash = ((hash << 5) + hash) + *arKey++;
}
switch (nKeyLength) {
case 7: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */
case 6: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */
case 5: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */
case 4: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */
case 3: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */
case 2: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */
case 1: hash = ((hash << 5) + hash) + *arKey++; break;
case 0: break; EMPTY_SWITCH_DEFAULT_CASE()
}
return hash;
}