PHP에서 array_fill ()은 지정된 길이와 지정된 값의 배열을 빠르게 생성 할 수있는 매우 실용적인 기능입니다. 예를 들어:
$filledArray = array_fill(0, 5, 'm66.net');
// 산출: ['m66.net', 'm66.net', 'm66.net', 'm66.net', 'm66.net']
표면적으로 많은 시나리오에서 기존 수동 루프 할당 방법을 대체 할 수 있습니다. 그러나 실제 개발에서 Array_fill ()은 수동 루프를 완전히 대체 할 수 없으며 응용 프로그램과 유연성의 범위에는 특정 제한이 있습니다. 다음으로 Array_fill () 의 한계와 수동 루프 할당이 더 적합한 시나리오에 대해 논의합니다.
array_fill () 로 개체를 채우면 동일한 객체 참조를 배열에 반복적으로 채 웁니다. 이것은 요소를 수정하는 것이 변경 될 것임을 의미합니다.
$obj = new stdClass();
$obj->url = 'https://m66.net';
$array = array_fill(0, 3, $obj);
$array[0]->url = 'https://m66.net/changed';
print_r($array); // 모든 요소 url 모두로 바뀌 었습니다 'https://m66.net/changed'
**왜? ** 모든 요소는 동일한 $ obj 에 대한 참조이므로.
수동 루프 할당을 사용하는 경우이 문제를 피하기 위해 매번 새 인스턴스를 생성 할 수 있습니다.
$array = [];
for ($i = 0; $i < 3; $i++) {
$obj = new stdClass();
$obj->url = 'https://m66.net';
$array[] = $obj;
}
Array_Fill () 의 첫 번째 매개 변수는 시작 인덱스이며 숫자가 아닌 키 이름으로 사용자 정의 할 수 없습니다. 예를 들어:
// 생성하고 싶습니다 ['home' => 'm66.net', 'about' => 'm66.net'] 그렇게하는 것은 불가능합니다
현재 수동 방법 만 사용할 수 있습니다.
$keys = ['home', 'about'];
$array = [];
foreach ($keys as $key) {
$array[$key] = 'https://m66.net';
}
배열 값이 인덱스와 관련된 경우 예를 들어 인덱스를 기반으로 URL을 생성하려고합니다.
$array = [];
for ($i = 1; $i <= 5; $i++) {
$array[] = 'https://m66.net/page/' . $i;
}
Array_fill ()은 고정 값 만 지원 하며이 동적 논리를 처리 할 수 없습니다.
중첩 어레이 또는 객체 어레이를 구성하기 위해 수동 루프는 더 많은 제어 성을 제공합니다. 예를 들어:
장면 | 이유 |
---|---|
객체 배열 | 참조 재사용으로 인한 부작용을 피하십시오 |
동적 구성 값 | 루프 로직을 통해 컨텐츠 생성을 지원합니다 |
비 가급 키 이름 | Array_Fill ()은 문자열 키를 지원하지 않습니다 |
중첩 된 구조 또는 복잡한 데이터 구조 | 구조의 유연한 제어 |
다른 데이터 소스와 상호 작용하십시오 | 예를 들어, 데이터베이스 및 API에서 배열을 채우기 위해 데이터를 동적으로 읽으십시오. |