PHP에서 다차원 배열을 처리 할 때는 구조를 초기화하려면 종종 특정 기술이 필요합니다. Array_Fill_Keys 는 1 차원 연관 배열을 초기화 할 때 매우 편리한 기능입니다. 이를 통해 다양한 키 이름과 통합 된 초기 값을 통해 배열을 신속하게 생성 할 수 있습니다. 그러나 하나를 초기화해야 할 때 array_fill_keys 의 적용 가능성은 논의 할 가치가 있습니다.
이 기사는 다차원 배열 초기화에서 Array_Fill_Keys 의 응용 프로그램 방법 및 적용 가능한 시나리오를 자세히 소개하고 그 제한을 분석합니다.
array array_fill_keys(array $keys, mixed $value)
이 함수는 두 가지 매개 변수를 수신합니다.
$ 키 : 키 이름을 포함하는 배열
$ 값 : 각 키에 할당 해야하는 값
예:
$keys = ['name', 'age', 'gender'];
$result = array_fill_keys($keys, null);
// 출력 결과
print_r($result);
/*
Array
(
[name] =>
[age] =>
[gender] =>
)
*/
이 접근법은 통합 구조로 1 차원 배열을 초기화하는 데 매우 적합합니다.
Array_Fill_Keys 자체는 중첩 어레이를 직접 생성 할 수는 없지만 (즉, 다차원 구조를 초기화 할 수는 없음) Array_Map 또는 루프를 결합하여 다차원 배열을 초기화하는 목적을 "위장"할 수 있습니다.
여러 사용자의 통합 구성 구조를 초기화해야한다고 가정합니다.
$user_ids = [101, 102, 103];
$config_keys = ['theme', 'language', 'notifications'];
$default_config = array_fill_keys($config_keys, 'default');
$users = array_fill_keys($user_ids, []);
foreach ($users as $id => &$config) {
$config = $default_config;
}
unset($config);
print_r($users);
/*
Array
(
[101] => Array
(
[theme] => default
[language] => default
[notifications] => default
)
[102] => Array
(
[theme] => default
[language] => default
[notifications] => default
)
[103] => Array
(
[theme] => default
[language] => default
[notifications] => default
)
)
*/
$user_ids = [101, 102, 103];
$config_keys = ['theme', 'language', 'notifications'];
$default_config = array_fill_keys($config_keys, 'default');
$users = array_map(function() use ($default_config) {
return $default_config;
}, array_fill_keys($user_ids, null));
print_r($users);
일관된 구조로 구성 데이터를 초기화하십시오
1D 배열 또는 2D 구조 사본을 신속하게 만듭니다.
현장 사전 설정 가치 구성을 형성하십시오
중첩 초기화는 지원되지 않습니다 : 다층 중첩 구조 (예 : 3 단계 및 4 단계 배열)는 직접 생성 할 수 없습니다.
인용문 질문 : 초기화 값이 딥 카피가없는 배열 또는 객체 인 경우 여러 키가 동일한 메모리 영역을 가리키고 하나의 값을 수정하면 다른 모든 항목에 영향을 줄 수 있습니다.
키 값은 동적 중첩 형식을 지원하지 않습니다 . 동적 중첩 키 이름의 경우 추가 논리 처리가 필요합니다.
Array_Fill_Keys는 다차원 배열 초기화 요구 사항을 충족 할 수없는 경우 다음과 같은 대안을 고려할 수 있습니다.
재귀 함수를 사용하여 중첩 어레이를 구축합니다
array_reduce를 사용하여 중첩 구조를 동적으로 생성합니다
사용자 정의 클래스를 사용한 초기화 논리 캡슐화
사용자 권한 시스템을 구축한다고 가정하고 각 사용자의 권한을 빈 컬렉션으로 초기화해야한다고 가정 해 봅시다. 다음과 같이 쓸 수 있습니다.