source

PHP에서 어레이의 최대 키 크기는 얼마입니까?

manysource 2022. 10. 25. 17:58

PHP에서 어레이의 최대 키 크기는 얼마입니까?

연관 배열을 생성하고 있으며 키 값은 1..n개의 열로 구성된 문자열입니다.

키를 돌려받을 수 있는 최대 길이가 있나요?만약 그렇다면, 나는 멈추고 다른 방법으로 할 것이다.

스크립트의 메모리 제한만으로 제한되는 것 같습니다.

간단한 테스트를 통해 128MB의 키를 얻을 수 있었습니다.

ini_set('memory_limit', '1024M');

$key = str_repeat('x', 1024 * 1024 * 128);

$foo = array($key => $key);

echo strlen(key($foo)) . "<br>";
echo strlen($foo[$key]) . "<br>";

PHP의 문자열 크기에는 실질적인 제한이 없습니다.설명서에 따르면:

주의: 문자열이 매우 커지는 것은 문제 없습니다.PHP는 문자열 크기에 경계를 두지 않습니다. 유일한 제한은 PHP가 실행 중인 컴퓨터의 사용 가능한 메모리입니다.

이는 배열에서 문자열을 키로 사용하는 경우에도 적용되는 것으로 추정할 수 있지만, PHP가 검색을 처리하는 방법에 따라 문자열이 커짐에 따라 성능 저하가 발생할 수 있습니다.

zend_hash.h에서는,zend_inline_hash_func()PHP에서 키 문자열을 해시하는 방법을 보여 줄 수 있는 메서드이므로 8자 미만의 문자열 길이를 사용하는 것이 성능에 더 좋습니다.

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;   
}

언급URL : https://stackoverflow.com/questions/467149/what-is-the-max-key-size-for-an-array-in-php