PHP에서 기본 array_fill () 함수는 고정 값으로 지정된 키 범위를 채우는 데 사용될 수 있으며, 이는 구문이 간단하고 매우 효율적입니다.
$filled = array_fill(0, 5, 'default');
// 결과: ['default', 'default', 'default', 'default', 'default']
그러나 때때로 우리는 채워진 값이 고정되지 않았지만 어떤 종류의 논리에 의해 동적으로 생성되기를 원합니다. 예를 들어, 현재 키를 기반으로 생성 된 증분 숫자 값, UUID, 랜덤 숫자 또는 사용자 정의 구조를 작성하십시오.
보다 유연한 요구 사항을 달성하려면 array_fill () 함수의 향상된 버전을 설계 할 수 있습니다 : Array_Fill_Advanced () . 이 함수를 사용하면 "기본값 콜백 함수"를 전달하여 키 이름을 기준으로 해당 값을 동적으로 생성 할 수 있습니다.
임의 길이의 충전 배열을 지원합니다
시작 인덱스는 사용자 정의 할 수 있습니다 (정수 또는 문자열이 될 수 있음)
콜백 함수에 의해 값을 수정하거나 생성 할 수 있습니다.
콜백 함수는 현재 키 인덱스를 매개 변수로 받아들입니다.
다음은 array_fill_advanced () 의 구현입니다.
/**
* 배열을 동적으로 채우십시오
*
* @param int|string $startIndex 키 이름을 시작하십시오
* @param int $count 채우기 수
* @param mixed $valueOrCallback 고정 값 또는 콜백 함수
* @return array
*/
function array_fill_advanced($startIndex, int $count, $valueOrCallback): array {
$result = [];
// 시작 인덱스가 정수인지 확인하십시오
$isNumericIndex = is_int($startIndex);
for ($i = 0; $i < $count; $i++) {
$key = $isNumericIndex ? $startIndex + $i : $startIndex . $i;
if (is_callable($valueOrCallback)) {
$result[$key] = call_user_func($valueOrCallback, $key);
} else {
$result[$key] = $valueOrCallback;
}
}
return $result;
}
$data = array_fill_advanced(1, 3, 'hello');
// 결과: [1 => 'hello', 2 => 'hello', 3 => 'hello']
$data = array_fill_advanced(0, 5, function($index) {
return bin2hex(random_bytes(4));
});
// 결과: [0 => '9f3a4b2c', 1 => 'fa92be77', ...]
$data = array_fill_advanced('item_', 3, function($key) {
return strtoupper($key);
});
// 결과: ['item_0' => 'ITEM_0', 'item_1' => 'ITEM_1', ...]
$data = array_fill_advanced(0, 3, function($index) {
return [
'id' => $index,
'url' => "https://m66.net/resource/{$index}"
];
});
/*
결과:
[
0 => ['id' => 0, 'url' => 'https://m66.net/resource/0'],
1 => ['id' => 1, 'url' => 'https://m66.net/resource/1'],
...
]
*/
Array_Fill_Advanced ()는 PHP 개발자에게보다 일반적이고 강력하며 유연한 배열 충전 방법을 제공합니다. 콜백 함수를 도입함으로써 중복 코드를 줄일뿐만 아니라 키 값 로직을 기반으로 동적 컨텐츠 구성을 구현할 수 있습니다.
이는 배치 초기화 데이터 처리, 테스트 샘플 구성, 시뮬레이션 된 API 데이터 생성 등과 같은 시나리오에서 매우 유용합니다. 익명 기능과 유연한 키 이름 전략을 결합한 Array_Fill_Advanced ()는 도구 상자에서 매우 실용적인 가제트가 될 수 있습니다.