php에서 array_fill_keys ()는 지정된 키를 사용하여 새 배열을 신속하게 만들고 모든 키의 값을 동일한 값으로 설정할 수있는 매우 실용적인 기능입니다. 따라서 질문은 : 익명 함수 (클로저) **를 array_fill_keys () 함수의 채우기 값으로 사용할 수 있습니까?
대답은 : 그렇습니다 . 그러나 한 가지 주목할 것이 있습니다.
array_fill_keys(array $keys, mixed $value): array
$ 키는 설정하려는 키 이름을 포함하는 배열입니다.
$ 값 은 각 키에 할당하려는 값입니다.
익명 함수를 $ value 로 전달할 수 있지만 array_fill_keys () 에 예상대로 작동하지 않을 수 있습니다. 각 키에 대해이 익명 함수를 실행하지 않고 모든 키에 동일한 기능 참조를 할당합니다.
<?php
$keys = ['apple', 'banana', 'cherry'];
$array = array_fill_keys($keys, function() {
return rand(1, 100);
});
print_r($array);
출력 결과 :
Array
(
[apple] => Closure Object
[banana] => Closure Object
[cherry] => Closure Object
)
보시다시피, 각 키에 해당하는 값은 익명 함수의 실행 결과 가 아니라 폐쇄 객체입니다. 즉, 각 키가 익명 함수에 의해 다른 값을 생성하기를 원한다면 직접 수행 할 수는 없습니다 .
각 키마다 다른 값을 생성하려면 (다른 임의 숫자와 같은) 횡단에서 익명 함수를 실행 해야합니다.
<?php
$keys = ['apple', 'banana', 'cherry'];
$array = [];
foreach ($keys as $key) {
$array[$key] = (function() {
return rand(1, 100);
})();
}
print_r($array);
샘플 출력 :
Array
(
[apple] => 73
[banana] => 25
[cherry] => 89
)
Key Name Array와 함께 Array_Map ()을 사용하여 달성 할 수도 있습니다.
<?php
$keys = ['apple', 'banana', 'cherry'];
$array = array_combine($keys, array_map(function() {
return rand(1, 100);
}, $keys));
print_r($array);
작은 응용 프로그램을 개발하고 있으며 각 모듈이 기본 프로세서가 필요하다고 가정합니다. 다음과 같이 쓸 수 있습니다.
<?php
$modules = ['news', 'shop', 'forum'];
$defaultHandler = function($module) {
return "https://m66.net/handler/{$module}";
};
$config = [];
foreach ($modules as $module) {
$config[$module] = $defaultHandler($module);
}
print_r($config);
출력 예 :
Array
(
[news] => https://m66.net/handler/news
[shop] => https://m66.net/handler/shop
[forum] => https://m66.net/handler/forum
)
Array_Fill_Keys ()는 익명 함수를 값으로 전달하는 것을 지원하지만 실행하지는 않습니다.
동적 값을 생성하려면 루프 또는 Array_map () 에서 익명 함수를 호출해야합니다.
array_fill_keys () 는 정적 값 충전에 더 적합하지만 동적 로직은 Traversal에 의해 처리되는 것이 좋습니다.
이 기사가 array_fill_keys () 와 PHP의 익명 함수 간의 사용 차이를 더 잘 이해하는 데 도움이되기를 바랍니다. 이러한 유형의 기본 행동에 관심이 있다면 메모리에서 PHP 어레이의 동작에 대한 더 깊은 이해를 얻으려고 노력할 수 있으며 더 많은 것을 얻을 수 있습니다.