PHP에서 array_filter () 함수는 배열에서 요소를 필터링하는 데 사용되는 공통 어레이 처리 도구입니다. array_filter () 함수는 콜백 함수와 배열을 매개 변수로 받아들이고 콜백 함수 조건을 충족하는 모든 요소를 포함하는 새 배열을 반환합니다.
기본적으로 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 .
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)이 보존됩니다.
그러나 어떤 경우에는 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 패턴을 사용하지만 실제 요소의 값이 아닌 키 값을 필터링하기 때문에 키 이름은 여전히 유지됩니다.
Array_Filter ()는 배열 키를 변경하지 않고도 배열 값 만 기본적으로 필터링합니다. array_filter_use_key 또는 array_filter_use_both를 사용하는 경우 키 이름이 다시 계산되거나 재설정 될 수 있습니다. 이는 PHP의 내부 처리 로직, 특히 다른 필터링 모드를 사용할 때 리턴 값이 키 이름의 유지에 영향을 줄 수 있습니다.
필터링 된 배열이 연속 키 이름을 재생하려면 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부터 시작하는 키 이름이 연속적입니다.
Array_Filter ()는 기본적으로 키 이름을 유지하지만 특히 Array_Filter_use_key 또는 Array_Filter_use_Both를 사용할 때 특정 모드에서 키 이름이 발생할 수 있습니다. 키 이름을 재설정 해야하는 경우 array_values () 별로 해결할 수 있습니다.
이 기사가 array_filter () 의 행동에 대한 이해에 도움이되기를 바랍니다!