현재 위치: > 최신 기사 목록> array_fill ()의 최대 길이 한계는 얼마입니까?

array_fill ()의 최대 길이 한계는 얼마입니까?

M66 2025-06-05

PHP 개발에서 array_fill () 함수는 지정된 길이와 지정된 값으로 채워진 배열을 빠르게 생성 할 수있는 매우 실용적인 도구입니다. 데이터 구조를 초기화하거나 기본값을 빠르게 채울 때 특히 편리합니다. 그러나이 기능에 대한 일반적인 질문은 "배열을 얼마나 많이 채울 수 있습니까? 상한이 있습니까?"

array_fill () 소개

array_fill () 함수의 기본 구문은 다음과 같습니다.

 array array_fill(int $start_index, int $count, mixed $value)
  • $ start_index : 배열의 시작 색인.

  • $ count : 채울 요소의 수.

  • $ 값 : 패딩의 값.

간단한 예를 들어 봅시다 :

 $result = array_fill(0, 5, 'm66.net');
print_r($result);

출력은 다음과 같습니다.

 Array
(
    [0] => m66.net
    [1] => m66.net
    [2] => m66.net
    [3] => m66.net
    [4] => m66.net
)

array_fill () 함수의 한계는 무엇입니까?

Array_Fill () 자체는 명백한 제한을 설정하지 않지만 다음 측면이 적용됩니다.

1. 메모리 제한

PHP는 메모리에 민감한 언어이며 Array_Fill () 로 채워진 데이터는 메모리에 직접 저장된 배열입니다. 수백만 또는 수백만 수백만의 요소와 같은 매우 큰 배열을 만들려고하면 "메모리 오버플로"또는 "스크립트 실행 시간 초과"와 같은 오류가 발생할 수 있습니다.

예를 들어, 다음 예제는 PHP가 "허용 메모리 크기 소진"오류를 던질 수 있습니다.

 $hugeArray = array_fill(0, 100000000, 'test'); // 알아채다:제작 환경 에서이 코드를 우연히 실행하지 마십시오.!

PHP의 Memory_Limit이 기본값 (예 : 128m 또는 256m)으로 설정되면 위의 코드는 거의 실패합니다. INI_SET () 를 통해 메모리 제한을 일시적으로 늘릴 수 있지만 궁극적으로 서버 물리적 리소스에 의해 제한됩니다.

 ini_set('memory_limit', '1G');

2. 정수 제한

array_fill () $ count 의 두 번째 매개 변수는 정수이고 이론적 인 최대 값은 php_int_max 입니다. 64 비트 시스템에서 PHP_INT_MAX 는 약 9.2 × 10^18이지만 실제로 메모리가 충분하지 않기 때문에 큰 배열을 채울 수는 없습니다.

32 비트 시스템에서 PHP_INT_MAX 는 약 2,147,483,647 (21 억)이지만 여전히 이론적입니다.

3. 배열 인덱스의 최대 값

PHP는 자동으로 성장하는 배열 인덱스를 지원하지만, 특히 인덱스가 막대한 숫자로 시작할 때, 이는 성능 문제를 일으키고 경고를 유발할 수 있습니다.

 $weirdArray = array_fill(PHP_INT_MAX - 5, 10, 'value');
// 이것은 희소 배열을 만듭니다,많은 기억을 취할 수 있습니다。

PHP는 당신이 이것을하는 것을 막지는 않지만 결과는 당신이 기대하는 것이 아닐 수도 있습니다.

요약

  • array_fill () 함수는 이론적으로 "요소 숫자 제한"이 없지만 실제로 서버 메모리에 의해 제한됩니다 .

  • 대부분의 정상적인 사용 시나리오에서 메모리가 허용하는 경우 수만에서 수백만 개의 요소가 허용됩니다 .

  • 무의미한 초대형 어레이를 채우고 스크립트의 메모리 사용량을 모니터링하는 것이 좋습니다.

  • 보다 유연하고 메모리 절약 구조가 필요한 경우 발전기 ( 수율 ) 또는 기타 가벼운 처리 방법을 사용해보십시오.

페이징 인터페이스 또는 API의 성능을 테스트하는 것과 같은 특정 테스트 데이터 또는 시뮬레이션 된 데이터 목록을 구성하려면 다음 방법을 사용하여 Array_Map 과 함께 구현할 수 있습니다.

 $users = array_fill(0, 1000, null);
$users = array_map(function($index) {
    return [
        'id' => $index,
        'name' => "User_$index",
        'profile' => "https://m66.net/user/$index"
    ];
}, array_keys($users));

print_r($users[0]);