현재 위치: > 최신 기사 목록> 익명 함수를 충전 값으로 사용할 수 있습니까?

익명 함수를 충전 값으로 사용할 수 있습니까?

M66 2025-05-14

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
)

보시다시피, 각 키에 해당하는 값은 익명 함수의 실행 결과 가 아니라 폐쇄 객체입니다. 즉, 각 키가 익명 함수에 의해 다른 값을 생성하기를 원한다면 직접 수행 할 수는 없습니다 .

올바른 방법 : array_map 또는 foreach를 결합하십시오

각 키마다 다른 값을 생성하려면 (다른 임의 숫자와 같은) 횡단에서 익명 함수를 실행 해야합니다.

 <?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 어레이의 동작에 대한 더 깊은 이해를 얻으려고 노력할 수 있으며 더 많은 것을 얻을 수 있습니다.