array_column($rows, $column)는 행 목록의 모든 행에서 $column의 값을 반환합니다. 레코드의 표를 필드 하나의 평평한 배열로 바꾸며, implode, in_array, array_sum, array_search 전에 필요한 것이 바로 이것입니다.
행은 어디서든 올 수 있습니다. 디코딩한 JSON 응답, CSV 파일, 연관 배열의 배열을 반환한 데이터베이스 쿼리 등입니다.
인덱스 키로 키와 값 쌍 만들기
세 번째 인수는 그 값이 각 결과의 키가 될 필드를 지정합니다. array_column($users, 'name', 'id')는 예를 들어 <select> 목록을 위해 id에서 이름으로 가는 조회 테이블을 만드는 일반적인 방법입니다.
두 행의 인덱스 값이 같으면 나중 행이 앞의 행을 덮어씁니다.
null로 행 전체를 id로 인덱싱하기
열 자리에 null을 넘기면 각 행 전체를 유지하면서 인덱스 필드로 키를 다시 정합니다. 그러면 id로 행을 찾는 것이 반복문이 아니라 키 접근 한 번이 됩니다.
인덱스를 한 번 만들면 그 뒤의 모든 조회가 즉시 끝나며, 반복문에서 많은 id를 찾을 때 중요합니다.
array_column과 array_search로 행 찾기
특정 값을 가진 행을 찾으려면 열을 검색하고 돌려받은 위치를 쓰세요. 첫 번째 행에서 일치하면 0이 반환되므로 결과를 !== false로 확인하세요.
array_column은 리스트를 반환하므로 이 방법은 $users의 키가 0, 1, 2라는 것에 의존합니다. 배열을 필터링해서 빈틈이 있다면 먼저 array_values($users)를 호출하세요. false와 0 함정은 array_search 페이지에서 자세히 다룹니다.
열 합계, 개수, 평균
array_column은 수학 헬퍼와 잘 어울립니다. 필드를 뽑은 다음 더하세요.
수량 곱하기 가격처럼 여러 필드로 계산한 값이라면 마지막 줄처럼 array_map이 맞는 도구입니다.
객체와 함께 쓰는 array_column
객체 목록에서 array_column은 public 속성을 읽습니다. private과 protected 속성은 보이지 않습니다.
두 번째 호출은 빈 배열을 반환합니다. password가 private이므로 모든 객체를 건너뜁니다.
필드가 없는 행은 건너뛴다
array_column은 필드가 없는 행에 자리 표시 값을 채우지 않습니다. 결과가 입력보다 짧을 수 있어서 위치가 더 이상 행과 맞지 않습니다.
첫 번째 결과에는 전화번호가 두 개 있고 Bob에게 번호가 없었다는 단서가 없습니다. 이름을 인덱스 키로 쓰면 누구의 번호인지 알 수 있으므로, 일부 행에 필드가 없을 수 있다면 이 형태가 더 안전합니다.
자주 묻는 질문
PHP에서 array_column은 무엇을 하나요?
행(배열이나 객체)의 목록을 받아 각 행에서 필드 하나의 값을 반환합니다. array_column($users, 'email')은 이메일의 평평한 배열을 줍니다. 그 필드가 없는 행은 건너뜁니다.
행으로 키와 값 배열을 만들려면 어떻게 하나요?
키로 쓸 필드를 세 번째 인수로 넘기세요: array_column($users, 'name', 'id')는 [id => name, ...]을 반환합니다. 두 번째 인수로 null을 넘기면(array_column($users, null, 'id')) id로 인덱싱된 행 전체를 유지합니다.
행에 필드가 없으면 array_column은 어떻게 하나요?
그 행을 건너뛰므로 array_column($people, 'phone')은 행 수보다 적은 값을 반환할 수 있고 위치가 더 이상 맞지 않습니다. 각 값이 어느 행에서 왔는지 보려면 인덱스 키를 추가하세요: array_column($people, 'phone', 'name').
array_column은 객체와도 동작하나요?
네, 객체 배열에서는 public 속성을 읽으며, 클래스가 __isset을 정의했다면 __get으로 제공되는 속성도 읽습니다. private과 protected 속성은 건너뜁니다.