PHP에서 Array_Filter ()는 배열에서 "빈"값을 제거하거나 콜백 함수를 사용하여 복잡한 필터링을 수행 할 수있는 매우 실용적인 기능입니다. 그러나 모든 시나리오에서 최선의 선택은 아닙니다. 경우에 따라 Array_Filter ()를 사용하면 성능 문제가 발생하고 코드 로직이 혼란스럽고 결과 오류가 발생할 수 있습니다. Array_Filter ()를 사용하지 않아야하는 상황에서 논의합시다.
Array_Filter ()는 기본적으로 원래 배열의 키 이름을 유지하지만 다시 표시되지 않습니다. 0에서 지속적으로 증가하는 인덱스 배열이 예상되는 경우 array_filter ()를 사용하면 실망 할 수 있습니다. 예를 들어:
$data = [0 => 'A', 1 => '', 2 => 'B'];
$result = array_filter($data);
print_r($result);
출력은 다음과 같습니다.
Array
(
[0] => A
[2] => B
)
현재 JSON_ENCODE 로 프론트 엔드로 전달하거나 인덱스가있는 요소에 액세스하려고하면 문제가 발생할 수 있습니다. 이 시점에서 Array_Values (array_filter (...))를 사용하거나 Foreach를 사용하여 직접 처리해야합니다.
Array_Filter ()는 기본적으로 모든 "False 값"을 제거하여 (False, 0, NULL, ', [] 등) 일부 시나리오에서 데이터 무결성을 파괴합니다. 예를 들어:
$data = [0, 1, 2, false];
$result = array_filter($data);
print_r($result);
출력은 다음과 같습니다.
Array
(
[1] => 1
[2] => 2
)
False 와 0이 모두 제거되지만 이러한 값이 이해되면 사용자의 투표를 계산하는 경우 (0은 이의 제기를 의미) 용납 할 수 없습니다.
해결책은 사용자 정의 콜백 기능을 전달하는 것입니다.
$result = array_filter($data, function($val) {
return $val !== null;
});
Null을 제거하려면 기본 동작에 의존하지 마십시오.
Array_Filter () 는 편의 기능이지만 전체 배열을 통과하여 구현되며, 이는 대형 데이터 세트 또는 높은 동시 시나리오에서 자주 호출하면 성능에 영향을 줄 수 있습니다. 예를 들어, 수백만 레코드가있는 배열에서 Array_Filter () 를 반복적으로 사용하면 상당한 성능 오버 헤드가 발생합니다.
현재 사용해야하는지 또는 PHP에서 처리하기 전에 결과가 나오기를 기다리지 않고 SQL 쿼리에서 직접 필터링하는 등 다른 처리 프로세스로 병합 될 수 있는지 고려해야합니다.
PHP는 자연스럽게 체인 호출을 지원하는 데이터 처리 언어가 아니므로 (JavaScript의지 도/필터/reter 와 달리) 체인 호출에서 Array_Filter ()를 사용하면 논리적 혼란이 쉽게 발생할 수 있습니다. 예를 들어: