PHP에서 array_filter () 함수는 콜백 함수를 통해 배열 요소를 필터링하는 데 사용됩니다. 이 함수를 사용하면 배열을 반복하고 콜백 함수의 리턴 값에 따라 요소를 유지할지 여부를 결정합니다. 콜백 함수가 true를 반환하면 요소가 유지됩니다. False가 있으면 요소가 필터링됩니다.
그러나 때로는 Array_Filter ()가 작동하지 않는 것처럼 보이므로 결과가 기대치와 일치하지 않습니다. 다음으로 몇 가지 일반적인 문제와 솔루션에 대해 논의 할 것입니다.
Array_Filter () 에서 사용하는 콜백 함수는 부울 값을 반환해야합니다. 콜백 함수가 NULL , FALSE 또는 기타 FALSE 값을 반환하면 요소가 필터링됩니다. True 가 반환되면 요소가 보존됩니다. Array_Filter ()가 예상대로 작동하지 않는 경우 콜백 함수의 반환 값을 확인하는 것이 매우 중요합니다.
예제 :
$arr = [1, 2, 3, 4, 5];
$result = array_filter($arr, function($value) {
if ($value % 2 == 0) {
return 1; // 여기로 돌아와야합니다 true,대신에 1
}
return false;
});
print_r($result);
해결 방법 : 콜백 함수가 다른 값이 아닌 부울 값 을 반환하십시오.
수정 코드 :
$arr = [1, 2, 3, 4, 5];
$result = array_filter($arr, function($value) {
return $value % 2 == 0; // 부울 가치를 반환하십시오 true 또는 false
});
print_r($result);
콜백 함수의 예상 매개 변수 유형이 실제로 전달 된 배열 요소의 유형과 일치하지 않으면 요소가 올바르게 필터링되지 않을 수 있습니다. 예를 들어, 콜백 함수가 정수 값을 수신 할 것으로 예상되면 실제로 문자열 또는 다른 유형의 데이터를 전달합니다.
예제 :
$arr = ["1", "2", "3", "4", "5"];
$result = array_filter($arr, function($value) {
return $value % 2 == 0; // 여기 $value 그것은 문자열입니다,예상치 못한 결과를 유발합니다
});
print_r($result);
솔루션 : 캐스팅 사용 또는 배열의 요소 유형이 콜백 함수의 요구 사항과 일치하는지 확인하십시오.
수정 코드 :
$arr = ["1", "2", "3", "4", "5"];
$result = array_filter($arr, function($value) {
return (int)$value % 2 == 0; // 정수에 캐스트
});
print_r($result);
Array_Filter ()는 기본적으로 배열의 모든 잘못된 값을 필터링합니다 (예 : NULL , FALSE , 빈 문자 등). 배열에 널 값이 있으면 필터링 결과가 예상보다 악화 될 수 있습니다.
예제 :
$arr = [0, 1, 2, null, false, "", 3];
$result = array_filter($arr);
print_r($result); // 여기서 필터링됩니다 0、null、false 그리고 빈 줄
솔루션 : 0 또는 False 와 같은 값을 유지하려면 사용자 정의 콜백 함수를 전달하거나 array_filter_use_both 플래그를 사용하여 필터링 방법을 제어 할 수 있습니다.
사용자 정의 콜백 함수 코드 :
$arr = [0, 1, 2, null, false, "", 3];
$result = array_filter($arr, function($value) {
return $value !== null; // 예약하다 null 다른 값
});
print_r($result);
Array_Filter ()는 원래 배열을 수정하는 대신 새 배열을 반환합니다. 원래 배열을 수정하려면 참조 통과 또는 기타 방법이 필요합니다. 원래 배열을 직접 조작하려면 Array_walk () 또는 기타 함수를 사용할 수 있습니다.
예제 :
$arr = [1, 2, 3, 4, 5];
array_filter($arr, function($value) {
return $value > 3;
});
print_r($arr); // 원래 배열은 수정되지 않았습니다
솔루션 : 원래 배열을 수정하려면 Array_Walk ()를 사용하거나 값을 직접 재 할 수 있습니다.
수정 코드 :
$arr = [1, 2, 3, 4, 5];
$arr = array_filter($arr, function($value) {
return $value > 3;
});
print_r($arr); // 수정 된 배열을 직접 반환하십시오
Array_Filter ()를 사용하면 두 번째 매개 변수가 필터링 기준을 지정할 수 있습니다. 기본적으로 콜백 함수를 사용하여 요소를 필터링합니다. 그러나이 매개 변수가 잘못 사용되면 문제가 발생할 수도 있습니다.
예제 :
$arr = [1, 2, 3, 4, 5];
$result = array_filter($arr, 1); // 숫자 값을 잘못 사용했습니다 1
print_r($result);
솔루션 : 두 번째 매개 변수가 유효한 콜백 함수인지 확인하십시오.
수정 코드 :
$arr = [1, 2, 3, 4, 5];
$result = array_filter($arr, function($value) {
return $value % 2 == 0; // 콜백 함수를 올바르게 사용하십시오
});
print_r($result);