Array_fill () 은 PHP에서 매우 편리한 기능으로, 지정된 값을 포함하는 배열을 빠르게 생성하는 데 사용할 수 있습니다. 그러나이 기능이 모든 경우에 최선의 선택은 아닙니다. 이 기사는 Array_fill () 과 더 나은 대안에 어떤 상황이 적합하지 않은지 탐구합니다.
PHP에서 Array_Fill () 의 기본 구문은 다음과 같습니다.
array_fill(int $start_index, int $count, mixed $value): array
배열을 반환하고 $ start_index 로 시작하고 $ count 요소를 생성하며 각 요소의 값을 $ 값 으로 설정합니다.
예:
$filled = array_fill(0, 5, 'apple');
// 산출: [0 => 'apple', 1 => 'apple', 2 => 'apple', 3 => 'apple', 4 => 'apple']
이 기능은 간단하고 효율적으로 보일 수 있지만 일부 시나리오에서는 가장 적합한 도구가 아닐 수도 있습니다.
각 배열 요소의 값이 다르거나 각 키가 연속적이거나 동적으로 생성 된 값이 되려면 Array_Fill ()가 적용되지 않습니다.
// 오류 사용의 예(다른 값의 요구 사항을 충족시킬 수 없습니다)
$data = array_fill(0, 3, rand(1, 100));
// 모든 값은 동일합니다,예를 들어: [0 => 42, 1 => 42, 2 => 42],세 가지 임의의 숫자 대신
대안 :
$data = [];
for ($i = 0; $i < 3; $i++) {
$data[$i] = rand(1, 100);
}
수백만의 요소와 같이 매우 큰 배열을 생성 해야하는 경우 Array_fill () 은 빠르지 만 많은 양의 메모리를 할당하면 성능 병목 현상 또는 메모리 오버플로가 발생할 수 있습니다.
예를 들어:
$hugeArray = array_fill(0, 10000000, 0); // 메모리 소진을 유발할 수 있습니다
이 경우 발전기를 사용하여 값을 생성하고 메모리를 저장하는 것이 가장 좋습니다.
대안 : 생성기 기능 사용
function generateZeros($count) {
for ($i = 0; $i < $count; $i++) {
yield 0;
}
}
array_fill () 의 키는 $ start_index 에서 시작하는 정수 일 수 있으며 문자열 키와 함께 사용할 수 없습니다. Array Indexes로 'user_1' 및 'user_2' 와 같은 키를 색인 해야하는 경우 Array_Fill ()을 사용할 수 없습니다.
대안 :
$users = [];
for ($i = 1; $i <= 5; $i++) {
$users['user_' . $i] = 'default';
}
각 요소가 별도의 객체 또는 배열이 필요한 경우 array_fill ()을 사용하면 특히 객체 또는 참조 유형을 값으로 사용할 때 "참조 사본"문제를 만듭니다.
$filled = array_fill(0, 3, []);
$filled[0]['a'] = 1;
// 결과:$filled[1] 그리고 $filled[2] 또한 영향을받을 것입니다,그들은 같은 배열을 가리키기 때문입니다
올바른 방법 :
$filled = [];
for ($i = 0; $i < 3; $i++) {
$filled[$i] = [];
}
$filled[0]['a'] = 1;
// 다른 요소는 영향을받지 않습니다
Array_fill () 은 배열을 신속하게 구축하기위한 강력한 도구이지만 사용에는 몇 가지 제한이 있습니다. 다음은 일반적으로 적용 할 수없는 시나리오의 간단한 목록입니다.
각 요소는 다른 값이 필요합니다
배열 키는 문자열 또는 형식 인덱스입니다
대규모 데이터를 처리 할 때 메모리 최적화가 필요합니다
각 요소는 독립적으로 참조되는 물체 또는 구조입니다.
값을 계산하거나 외부 논리에 의존해야합니다.
실제 시나리오에 따라보다 적절한 배열 구성 방법을 선택하면 효율적이고 안전한 PHP 프로그램을 작성할 수 있습니다.