2.06. 배열

여러개의 값을 한번에 넣을 수 있는 자료구조인 배열을 알아본다.

<?php
// 일반 배열
$a = array(1, 2, 3, 4);
var_dump($a);echo "<br />";
array_push($a, 5);
var_dump($a);echo "<br />";
unset($a[0]);
var_dump($a);echo "<br />";

// 연관 배열
$b = array('a' => 10);
var_dump($b);echo "<br />";
$b['b'] = 20;
var_dump($b);echo "<br />";
unset($b['a']);
var_dump($b);echo "<br />";

위 코드를 array.php 파일에 저장하고 브라우저에서 결과를 확인한다.

array(4) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) } 
array(5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) } 
array(4) { [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) } 

array(1) { ["a"]=> int(10) } 
array(2) { ["a"]=> int(10) ["b"]=> int(20) } 
array(1) { ["b"]=> int(20) } 

php에서 배열의 선언은 array 구문으로 한다. php 5.4 버전 이상에서는 [] 기호로도 대체 가능하다.

$a1 = array();
$a2 = [];

$a1처럼 선언해도 되고, $a2 처럼 선언해도 무관하다.


배열을 생성하면서 초기값을 넣을 수 있다. 아래는 배열을 생성하면서 초기값을 넣는 예시다.

$a1 = array(1,2,3,4);
$b1 = [1,2,3,4];

일반배열(순차 배열)은 연속된 값을 넣을 수 있다. 키는 숫자로 자동으로 붙여진다. 예제에서 $a 는 일반 배열이다.

$a = array(1, 2, 3, 4);

일반 배열에 항목을 추가할 때는 array_push(배열, 넣을 값) 형식으로 사용하면 된다. 가장 큰 숫자 키 값 + 1 이 새로운 배열의 키가 된다.

array_push($a, 5);

예제 결과에서는 $a[4] 가 새롭게 추가된 배열 값의 키다.

array(5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) } 

일반 배열에서 항목을 삭제할 때는 php에서 변수를 제거하는 구문인 unset 을 사용한다. 이 때 남은 배열의 다른 항목들의 인덱스가 재배치되지 않는다는 점 에 유의해야 한다.

unset($a[0]);

예제에서는 unset($a[0]) 후의 결과가 [1] 부터 시작하는 것을 볼 수 있다.

array(4) { [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) } 

연관배열은 키:값 쌍으로 이루어진 자료구조다. $b 가 연관배열이다.

$b = array('a' => 10);

연관배열에서 선언하면서 초기값을 넣을 때는 array('a' => 10) 처럼 키 => 값 형태로 넣는다. => 도 연산자이다.

일반 배열과 연관 배열은 다르지 않다. 일반 배열은 단순히 숫자 키가 자동으로 붙여진 연관배열에 불과하다.


php는 일반 배열과 연관 배열이 혼합된 형태로도 사용 가능하다.

$c = [1,2,3];
$c['age'] = 999;
var_dump($c);

결과는 아래와 같다.

array(4) { [0]=> int(1) [1]=> int(2) [2]=> int(3) ["age"]=> int(999) } 

연관배열에 값을 추가할 때는 $변수명[키] = 값 형태로 넣는다.

$b['b'] = 20;

연관배열에서 항목을 삭제할 때는 일반 배열과 동일하게 unset 을 사용한다.

Copyunset($b['a']);