program story

PHP에서 배열의 최대 키 크기는 얼마입니까?

inputbox 2020. 11. 18. 09:02
반응형

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

반응형