Menu

PHP array_filter(): 값이나 키로 배열 필터링

array_filter($array, $callback)는 콜백이 true를 반환하는 요소만 남깁니다. 빈 값 제거, ARRAY_FILTER_USE_KEY로 키 기준 필터링, array_values로 결과 번호 다시 매기기, array_reduce로 합계 내기를 알아봅니다.

이 페이지에는 실행 가능한 에디터가 있습니다 - 편집하고 실행하면 결과를 바로 볼 수 있습니다.

array_filter($array, $callback)는 $callback이 true(또는 true로 변환되는 값)를 반환하는 $array의 요소를 반환합니다. 배열이 먼저, 콜백이 두 번째이며, 남은 요소는 원래 키를 유지합니다.

결과의 키는 1, 3, 5, 7로, 그 값들이 원래 배열에서 있던 위치입니다. 이 세부 사항은 보기보다 중요하며, 다다음 절에서 처리 방법을 보여 줍니다.

배열에서 빈 값 제거하기

콜백 없이 array_filter를 호출하면 false로 변환되는 모든 값을 제거합니다. 빈 문자열, null, false, 0, "0", 빈 배열입니다. explode()로 나눈 조각이나 폼 필드 목록을 정리하는 가장 빠른 방법입니다.

첫 번째 결과는 "0"과 0도 잃었는데, 이는 실제 데이터(수량 0, 우편번호의 숫자)인 경우가 많습니다. 0이 유효한 답이라면 두 번째 호출처럼 콜백을 직접 쓰세요. PHP가 비어 있다고 보는 값의 전체 목록은 empty 페이지에 있습니다.

array_values로 결과 번호 다시 매기기

키가 유지되므로 필터링한 리스트에는 빈틈이 생길 수 있습니다. 그러면 0부터 도는 for문이 없는 키에 걸리고, json_encode는 결과를 배열 대신 JSON 객체로 바꿉니다. array_values()가 번호를 다시 매깁니다.

ARRAY_FILTER_USE_KEY로 키 기준 필터링

세 번째 인수는 콜백이 무엇을 받을지 정합니다. ARRAY_FILTER_USE_KEY는 키만 넘깁니다. ARRAY_FILTER_USE_BOTH는 값과 키를 차례로 넘깁니다.

이미 아는 고정된 키 집합을 남기려면 array_intersect_key($config, array_flip(['db_host', 'db_port']))가 콜백 없이 같은 일을 합니다.

다차원 배열 필터링

실제 데이터는 대부분 행의 목록입니다. 콜백은 한 번에 행 하나를 받으므로 필요한 필드를 검사하면 됩니다.

$maxPrice를 바꾸고 다시 실행해 보세요. 그다음 이름만 얻으려면 결과를 array_column에 넘기세요: array_column($affordable, 'name').

필터링, 매핑, 그리고 축약

array_filter는 요소를 고르고, array_map은 요소를 바꾸며, array_reduce는 배열을 값 하나로 접습니다. array_reduce($array, $callback, $initial)는 누적값과 다음 요소로 콜백을 호출합니다.

단순한 합계라면 array_sum($totals)가 더 짧습니다. array_reduce는 결과가 문자열, 그룹별 개수, 가장 큰 행처럼 다른 것일 때 쓸모가 있습니다.

흔한 실수: array_filter 안에서 값 바꾸기

콜백의 반환값은 요소를 남길지만 정합니다. 그 밖에 계산한 것은 버려지므로 이 코드는 아무것도 trim하지 않습니다.

array_map으로 변환한 다음 필터링하고, 깔끔한 리스트가 필요하면 array_values를 추가하세요.

자주 묻는 질문

PHP에서 배열의 빈 값을 제거하려면 어떻게 하나요?

콜백 없이 array_filter($array)를 호출하세요. 거짓으로 취급되는 모든 값("", null, false, 0, "0", [])을 버립니다. 빈 문자열과 null만 버리고 0은 남기려면 콜백을 넘기세요: array_filter($array, fn($v) => $v !== '' && $v !== null).

array_filter가 예전 키를 유지하는 이유는 무엇인가요?

array_filter는 번호를 다시 매기지 않습니다. 남은 요소는 원래 키 아래에 그대로 있으므로 리스트가 [0 => 'a', 2 => 'c']로 돌아올 수 있습니다. 다시 0, 1, 2를 얻으려면 array_values()로 감싸세요. 그러면 json_encode도 객체 대신 JSON 배열을 만듭니다.

PHP에서 키로 배열을 필터링하려면 어떻게 하나요?

세 번째 인수로 ARRAY_FILTER_USE_KEY를 넘기면 콜백이 값 대신 키를 받습니다: array_filter($arr, fn($k) => str_starts_with($k, 'db_'), ARRAY_FILTER_USE_KEY). 값과 키를 함께 받으려면 ARRAY_FILTER_USE_BOTH를 쓰세요.

array_filter와 array_map의 차이는 무엇인가요?

array_filter는 어떤 요소를 남길지 정하고 그 요소를 그대로 반환합니다. array_map은 모든 요소를 바꾸고 같은 개수의 요소를 반환합니다. 둘 다 하려면 이어서 쓰세요: array_map('strtoupper', array_filter($arr)).

Coddy 프로그래밍 언어 일러스트

Coddy로 코딩 배우기

시작하기