현재 위치: > 최신 기사 목록> array_filter ()를 사용할 때 키 이름 유지가 무시됩니다.

array_filter ()를 사용할 때 키 이름 유지가 무시됩니다.

M66 2025-05-17

PHP에서 array_filter () 함수는 배열에서 요소를 필터링하는 데 사용되는 공통 어레이 처리 도구입니다. array_filter () 함수는 콜백 함수와 배열을 매개 변수로 받아들이고 콜백 함수 조건을 충족하는 모든 요소를 ​​포함하는 새 배열을 반환합니다.

기본적으로 Array_Filter ()는 필터링 된 배열의 키 이름 (첨자)을 유지합니다. 그러나 많은 개발자들은 주요 이름이 유지되지 않거나 사용할 때 예기치 않은 상황이 발생할 수 있음을 발견 할 수 있습니다. 그렇다면 왜이 현상이 발생합니까?

1. Array_Filter () 의 동작

Array_Filter () 의 기본 함수는 콜백 함수의 반환 값에 따라 유지되는 요소를 결정하는 것입니다. True를 반환하는 요소는 유지되고 False를 반환하는 요소는 제거됩니다. 구문은 다음과 같습니다.

 array_filter(array $array, callable $callback = null, int $mode = 0): array
  • $ 배열 : 필터링 할 배열.

  • $ 콜백 : 필터링을위한 콜백 함수. 생략하면 비어 있지 않은 모든 값은 기본적으로 유지됩니다.

  • $ 모드 : 배열의 인덱싱 방법을 제어 할 수있는 선택적 매개 변수, 일반적으로 Array_Filter_use_key 또는 Array_Filter_use_Both .

2. 기본적으로 Array_Filter ()는 키 이름을 유지합니다

Array_Filter ()를 호출하면 배열 요소의 원래 키 이름을 유지합니다. 예를 들어 다음 예를 고려하십시오.

 $input = [0 => 'apple', 1 => 'orange', 2 => 'banana'];
$result = array_filter($input, function($value) {
    return strlen($value) > 5;
});

print_r($result);

출력은 다음과 같습니다.

 Array
(
    [1] => orange
    [2] => banana
)

보시다시피 원래 키 이름 (1 및 2)이 보존됩니다.

3. array_filter () 가 키 이름을 무시하는 경우

그러나 어떤 경우에는 array_filter ()가 키 이름을 유지하지 않는다는 것을 알게되면 일반적으로 array_filter_use_key 또는 array_filter_use_both 모드가 호출 될 때 사용되거나 콜백 함수가 다른 값을 반환하기 때문입니다.

이 예를 살펴 보겠습니다.

 $input = [0 => 'apple', 1 => 'orange', 2 => 'banana'];
$result = array_filter($input, function($key) {
    return $key > 0;
}, ARRAY_FILTER_USE_KEY);

print_r($result);

이 코드는 다음을 출력합니다.

 Array
(
    [1] => orange
    [2] => banana
)

여기서 Array_filter_use_key 패턴을 사용하지만 실제 요소의 값이 아닌 키 값을 필터링하기 때문에 키 이름은 여전히 ​​유지됩니다.

4. array_filter () 가 왜 키 이름의 유지를 무시합니까?

Array_Filter ()는 배열 키를 변경하지 않고도 배열 값 만 기본적으로 필터링합니다. array_filter_use_key 또는 array_filter_use_both를 사용하는 경우 키 이름이 다시 계산되거나 재설정 될 수 있습니다. 이는 PHP의 내부 처리 로직, 특히 다른 필터링 모드를 사용할 때 리턴 값이 키 이름의 유지에 영향을 줄 수 있습니다.

5. 솔루션 : 인덱스를 재건하십시오

필터링 된 배열이 연속 키 이름을 재생하려면 Array_Values ​​()를 사용하여 인덱스를 재구성 할 수 있습니다.

 $input = [0 => 'apple', 1 => 'orange', 2 => 'banana'];
$result = array_filter($input, function($value) {
    return strlen($value) > 5;
});
$result = array_values($result);

print_r($result);

산출:

 Array
(
    [0] => orange
    [1] => banana
)

보시다시피, Array_Values ​​()를 사용한 후 배열 키가 다시 표시되어 0부터 시작하는 키 이름이 연속적입니다.

6. 요약

Array_Filter ()는 기본적으로 키 이름을 유지하지만 특히 Array_Filter_use_key 또는 Array_Filter_use_Both를 사용할 때 특정 모드에서 키 이름이 발생할 수 있습니다. 키 이름을 재설정 해야하는 경우 array_values ​​() 별로 해결할 수 있습니다.

이 기사가 array_filter () 의 행동에 대한 이해에 도움이되기를 바랍니다!