PHP에서 array_filter는 콜백 함수의 리턴 결과를 기반으로 필터 어레이에 매우 실용적인 기능입니다. 기본적으로 콜백 함수가 제공되지 않으면 Array_Filter는 "거짓 값"으로 간주되는 모든 요소를 제거합니다. 이러한 "거짓 값"에는 다음이 포함됩니다.
거짓
널
0 (정수)
'0' (문자열)
'' (빈 문자열)
[] (빈 배열)
이로 인해 일부 개발자가 혼동 될 수 있습니다. 특히 원래 Null 또는 빈 현을 제거하고 싶을 때 정수 0 조차 함께 삭제 된 것을 발견했습니다. 그렇다면 왜 이런 일이 일어나고 있습니까? 더 깊이 살펴 보겠습니다.
PHP는 약한 유형 언어이므로 부울 작업을 수행 할 때 특정 유형을 부울 값으로 자동 변환합니다. 이 메커니즘을 유형 저글링이라고합니다. 부울 맥락에서 다음 값은 거짓 으로 해석됩니다.
var_dump((bool) false); // false
var_dump((bool) null); // false
var_dump((bool) 0); // false
var_dump((bool) '0'); // false
var_dump((bool) ''); // false
var_dump((bool) []); // false
값이 부울 유형으로 변환되고 False로 변환되는 한 Array_Filter는 기본적으로 필터링됩니다.
Array_Filter 기능 프로토 타입은 다음과 같습니다.
array_filter(array $array, ?callable $callback = null, int $mode = 0): array
두 번째 매개 변수 $ 콜백이 NULL 인 경우 Array_Filter는 실제로 다음과 같이 작동합니다.
$result = [];
foreach ($array as $key => $value) {
if ((bool) $value) {
$result[$key] = $value;
}
}
예를 들어:
$data = [0, 1, 2, null, '', 'hello', false];
$result = array_filter($data);
// 나오십시오 [1 => 1, 2 => 2, 5 => 'hello']
보시다시피, 0 , null , '' 및 false 는 모두 "false"로 간주되므로 제거됩니다.
NULL 값을 필터링하고 0 과 빈 문자열을 유지하려면 사용자 정의 콜백 기능을 전달할 수 있습니다 (예 :).
$data = [0, '0', '', null, false, 'PHP'];
$result = array_filter($data, function ($item) {
return !is_null($item);
});
// 그것을 유지하십시오 0、'0' 그리고 ''
예를 들어, 빈 줄을 제거하려는 경우 :
$result = array_filter($data, function ($item) {
return $item !== '';
});
이를 통해 특정 요구에 따라 유지되어야하는 값을 신중하게 제어 할 수 있습니다.
양식 제출 시스템을 구축하고 있으며 프론트 엔드 양식이 빈 필드를 전달할 수 있으며 사용자가 실제로 채우는 것만으로 유지하려고합니다.
$formData = [
'name' => 'Alice',
'email' => '',
'age' => 0,
'website' => null,
];
$filtered = array_filter($formData, function ($value) {
return $value !== '' && !is_null($value);
});
print_r($filtered);
출력 결과 :
Array
(
[name] => Alice
[age] => 0
)
이 결과에서 빈 문자열과 널이 제거되고 0은 실제로 0의 나이에 채워 졌을 수 있으므로 0이 유지됩니다.
Array_Filter를 사용할 때는 PHP에서 "False 값"의 개념을 이해하는 것이 중요합니다. 기본적으로, 그것은 null 또는 빈 줄이 아니라 부울 false 와 동등한 모든 값을 제거합니다. 보다 정확한 필터링 동작이 필요한 경우 항상 사용자 정의 콜백 기능을 전달하는 것이 좋습니다.
이러한 방식으로 사용자가 작성하는 "0"값과 같은 유효한 데이터를 실수로 삭제하지 않으며 다양한 비즈니스 시나리오를 유연하게 처리 할 수도 있습니다.