Menu

PHP 배열: 생성, 접근, 반복, 출력

PHP 배열은 각 값이 키 아래에 저장되는 순서 있는 목록입니다. $fruits = ['apple', 'banana'];는 $fruits[0]으로 읽습니다. 배열을 만들고, 요소를 읽고 바꾸고, 반복하고, 출력하는 방법과 어떤 배열 함수를 쓸지 알아봅니다.

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

PHP 배열은 값의 목록을 키 아래에 저장합니다. 대괄호로 만들고($fruits = ['apple', 'banana', 'cherry'];), 인덱스로 요소를 읽습니다($fruits[0]). 인덱스는 0부터 시작하며 count($fruits)는 요소의 개수를 줍니다.

모든 PHP 배열은 순서 있는 맵입니다. 각 값이 키 아래에 놓입니다. 키를 정하지 않으면 PHP가 0, 1, 2...로 번호를 매기고 인덱스 배열이 됩니다. 키를 직접 정하면(['name' => 'Ada']) 연관 배열이 됩니다. 둘 다 같은 array 타입입니다.

배열 만들기

대괄호가 일반적인 문법입니다. array()는 예전 표기이며 정확히 같은 결과를 만듭니다. range()는 숫자나 문자의 목록을 만들고, array_fill()은 값 하나를 반복합니다.

PHP 배열은 다른 배열을 포함해 여러 타입의 값을 동시에 담을 수 있습니다. 배열의 배열은 다차원 배열이며, 데이터 행을 담는 일반적인 방법입니다.

첫 번째와 마지막 요소 얻기

PHP에는 음수 인덱스가 없습니다. $arr[-1]은 "마지막 요소"가 아니라 -1이라는 키를 찾으며, 없으면 PHP가 Warning: Undefined array key -1을 출력합니다. 키가 0부터 시작하지 않을 때도 동작하는 array_key_first()와 array_key_last()를 쓰세요.

end($queue)도 마지막 값을 반환하지만, 부수 효과로 배열의 내부 포인터를 옮기므로 키를 쓰는 방식이 더 명확합니다.

배열 출력하기

echo $arr는 동작하지 않습니다. Array라는 단어와 경고가 출력됩니다. 목적에 맞는 출력 방법을 고르세요.

  • 디버깅 중 읽기 쉬운 덤프는 print_r($arr).
  • 각 값의 타입과 길이까지 보려면 var_dump($arr).
  • 화면에 보여 줄 하나의 문자열로 만들려면 implode(', ', $arr).
  • 배열을 JavaScript나 API로 보내려면 json_encode($arr).

HTML 안에서 배열을 출력하는 방법을 포함한 형식 옵션은 print_r와 var_dump 페이지에서 다룹니다.

배열 반복하기

foreach는 배열을 위해 만들어진 반복문입니다. 각 값을 주고, 요청하면 키도 줍니다. 키가 0부터 빈틈없이 이어지는 인덱스 배열에는 인덱스를 쓰는 for문도 동작합니다.

배열은 공유되지 않고 복사된다

배열을 다른 변수에 대입하거나 함수에 전달하면 복사본이 생깁니다. 복사본을 바꿔도 원본은 그대로입니다. 함수가 호출한 쪽의 배열을 바꿔야 한다면 매개변수에 &를 붙이세요.

작업별 배열 함수

PHP에는 70개가 넘는 배열 함수가 있습니다. 가장 많이 쓰는 함수들이며, 각각 별도의 페이지가 있습니다.

작업함수
끝에 추가array_push() 또는 $arr[] =
요소 개수count()
값이 있는지 확인in_array()
값의 키 찾기array_search()
키가 있는지 확인array_key_exists()
배열 합치기array_merge()
모든 값 변환array_map()
일부 값만 남기기array_filter()
정렬sort(), usort() 등
요소 제거unset(), array_splice()
일부 잘라 내기array_slice()
중복 제거array_unique()
문자열과 배열 변환explode(), implode()

조용히 합쳐지는 키

배열 키는 정수 아니면 문자열이며, PHP가 일부 키를 자동으로 변환합니다. "1"처럼 10진 정수처럼 보이는 문자열은 정수 1이 되므로 $a["1"]과 $a[1]은 같은 칸입니다. "01"과 "1.5"는 문자열로 남습니다. 폼 입력이나 CSV로 만든 배열의 요소가 예상보다 적어지는 이유가 이것입니다.

자주 묻는 질문

PHP에서 배열을 만들려면 어떻게 하나요?

대괄호를 쓰세요: $colors = ['red', 'green', 'blue'];. 빈 배열은 $items = [];입니다. 예전 문법인 array('red', 'green')도 같은 일을 하며 여전히 동작합니다.

PHP에서 배열을 출력하려면 어떻게 하나요?

echo로는 배열을 출력할 수 없습니다(Array라는 단어와 경고가 출력됩니다). 읽기 쉬운 덤프는 print_r($arr), 타입까지 보려면 var_dump($arr), 값을 한 줄로 출력하려면 echo implode(', ', $arr)를 쓰세요.

PHP에서 배열의 마지막 요소를 얻으려면 어떻게 하나요?

$arr[array_key_last($arr)](PHP 7.3+)나 end($arr)를 쓰세요. PHP에는 음수 인덱스가 없습니다. $arr[-1]은 -1이라는 키를 찾으며, 보통 그런 키는 없습니다.

PHP 배열은 값으로 전달되나요, 참조로 전달되나요?

값으로 전달됩니다. $b = $a;는 $b에 별도의 복사본을 주므로 $b를 바꿔도 $a는 바뀌지 않습니다. 함수 안에서 호출한 쪽의 배열을 수정하려면 매개변수를 참조로 선언하세요: function add(array &$list).

PHP에서 인덱스 배열과 연관 배열의 차이는 무엇인가요?

둘은 같은 타입입니다. 인덱스 배열은 PHP가 붙여 주는 정수 키 0, 1, 2...를 가지고, 연관 배열은 직접 고른 키, 보통 'name' 같은 문자열을 씁니다. 한 배열에 둘을 섞을 수도 있습니다.

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

Coddy로 코딩 배우기

시작하기