PHP - ARRAY
INDEX
ARRAY 배열
1차원 배열
1.1 배열 생성 및 요소 추가
배열을 생성할 때는 array()라는 함수를 이용하며, 배열 이름은 배열을 선언한 후 해당 배열에 접근하기 위해 사용한다.
배열의 요소에 접근하기 위해서는 인덱스(index)를 사용하는데, 0부터 시작하는 숫자 인덱스를 지원한다.
→ 이 인덱스를 이용하면 배열에 요소를 추가할 수 있다.
<?php
$arr = array();
$arr[0] = "A";
$arr[1] = "B";
$arr[2] = "C";
var_dump($arr);
?>
→ 위으 코드를 실행하면 다음과 같이 배열이 생성되고, 해당 배열에 요소가 추가되었음을 확인할 수 있다.
// result
array (size=3)
0 => String 'A' (length=1)
1 => String 'B' (length=1)
2 => string 'C' (length=1)
생성과 동시에 배열 요소를 초기화
<?php
$arr = array("A", "B", "C");
var_dump($arr);
?>
//result
array (size=3)
0 => String 'A' (length=1)
1 => String 'B' (length=1)
2 => string 'C' (length=1)
→ 위의 결과와 실행결과가 동일함을 확인할 수 있다.
1.2 배열의 홀(hole)
<?php
$arr = array();
$arr[10] ="hello";
var_dump($arr);
var_dump($arr[0]);
var_dump(isset($arr[0]));
var_dump(isset($arr[10]));
?>
// result
array (size=1)
10 => string 'hello' (length=5)
null
false
true
→ 실행시킨 결과, 아래와 같이 전체 배열 중 10번 인덱스에만 요소인 ‘hello’가 들어 있음을 확인 할 수 있으며, 0번 인덱스에는 기본값인 null이 들어있음을 확인할 수 있다. isset() 함수는 인수로 전달받은 변수가 초기화되어 있는 확인해주는데, 0번 인덱스는 초기화하지 않았기 때문에 false, 10번 인덱스는 ‘hello’로 초기화했기 때문에 true를 반환한다.
이렇듯 PHP에서는 빈 배열의 일부 값만 채울 수 있으며, 배열 요소가 없는 부분을 배열의 홀(hole)이라고 한다. PHP에서는 이러한 배열의 홀을 참조하게 되면, 초기화되지 않은 변수를 참조할 때처럼 기본값인 null을 반환한다.
1.3 배열과 반복문
<?php
$arr = array("A", "B", "C");
for ($i=0; $i<count($arr); $i++) {
echo $arr[$i]."<br/>";
}
?>
// result
A
B
C
→ 위의 코드에서
count()는 배열의 모든 요소의 개수를 반환하는 함수이다. 배열에 3개의 요소가 존재하므로 count($arr)은 3이다.
<?php
$arr = array();
$arr[2] = "A";
$arr[3] = "B";
$arr[4] = "C";
for ($i=0; $i<count($arr); $i++) {
echo $arr[$i]."<br/>";
}
?>
// result
A
→ 코드를 실행시킨 결과, A만 출력되는 것을 확인할 수 있다. count()는 전체 길이가 아닌 배열의 요소에 대한 수를 반환하기 때문에 3번의 반복문 수행으로 0, 1, 2번 인덱스에 대해서만 접근을 했다.
<?php
$arr = array();
$arr[2] = "A";
$arr[3] = "B";
$arr[4] = "C";
foreach ($arr as $element) {
echo $element. "<br/>";
}
?>
//result
A
B
C
→ 다음 코드를 실행시키면 A, B, C가 출력이된다. 배열의 빈 요소가 있다면, foreach를 사용하는 것이 좋다.
1.4 배열의 조작
<?php
// 배열 초기화
$arr = array("A", "B", "C");
for ($i = 0; $i < count($arr); $i++)
echo $arr[$i];
echo "<br />";
// 배열의 맨 끝에 요소 추가
array_push($arr, "D");
for ($i = 0; $i < count($arr); $i++)
echo $arr[$i];
echo "<br />";
// 배열의 맨 끝에 복수 요소 추가 (배열 결합 느낌)
$arr = array_merge($arr, ["E", "F"]);
for ($i = 0; $i < count($arr); $i++)
echo $arr[$i];
echo "<br />";
// 배열의 맨 앞에 요소 추가
array_unshift($arr, "G");
for ($i = 0; $i < count($arr); $i++)
echo $arr[$i];
echo "<br />";
// 배열의 특정 위치에 요소 추가.
// 여기서는 2번 인덱스에 요소를 추가하며, 기존의 요소들을 한 칸씩 밀어냄
array_splice($arr, 2, 0, "H");
for ($i = 0; $i < count($arr); $i++)
echo $arr[$i];
echo "<br />";
// 만약 기존의 2번 요소부터 길이 4까지를 제거하고 난 후,
// 2번 인덱스에 추가하고 싶다면 다음과 같이 쓰면 됨
array_splice($arr, 2, 4, "I");
for ($i = 0; $i < count($arr); $i++)
echo $arr[$i];
echo "<br />";
// 배열의 맨 앞 요소 제거
array_shift($arr);
for ($i = 0; $i < count($arr); $i++)
echo $arr[$i];
echo "<br />";
// 배열의 맨 뒤 요소 제거
array_pop($arr);
for ($i = 0; $i < count($arr); $i++)
echo $arr[$i];
echo "<br />";
// 정렬
sort($arr);
for ($i = 0; $i < count($arr); $i++)
echo $arr[$i];
echo "<br />";
// 역순 정렬
rsort($arr);
for ($i = 0; $i < count($arr); $i++)
echo $arr[$i];
echo "<br />";
?>
// result
ABC
ABCD
ABCDEF
GABCDEF
GAHBCDEF
GAIEF
AIEF
AIE
AEI
IEA
1.5 정리
배열의 맨끝에 요소 추가
배열의 맨 끝에 복수 요소 추가
배열의 맨 앞에 요소 추가
배열의 특정 인덱스에 요소 추가
배열의 특정 인덱스 기준으로 특정 길이 제거 후 요소 추가
배열의 맨 앞 요소 제거
배열의 맨 뒤 요소 제거
정렬
역순정렬
2. 다차원 배열
2.1 2차원 배열
2차원 배열이란 배열 요소로 또 다른 1차원 배열을 사용하는 배열을 의미합니다. 2차원 배열은 다음과 같은 문법에 따라 선언된다.
2.2 2차원 배열 요소 입력
<?php
// 1차원 배열을 3개 갖는 2차원 배열 선언
$arr = array(
array(),
array(),
array()
);
// 배열의 요소 추가
$arr[0][0] = "A";
$arr[0][1] = "B";
$arr[0][2] = 100;
$arr[1][0] = "C";
$arr[1][1] = 200;
$arr[1][2] = "E";
$arr[2][0] = false;
$arr[2][1] = 0.03;
$arr[2][2] = true;
var_dump($arr);
echo $arr[0][0]." ".$arr[0][1]." ".$arr[0][2]."<br/>";
echo $arr[1][0]." ".$arr[1][1]." ".$arr[1][2]."<br/>";
echo $arr[2][0]." ".$arr[2][1]." ".$arr[2][2]."<br/>";
?>
//result
array (suze=3)
0 =>
array (size=3)
0 => string 'A' (length=1)
1 => string 'B' (length=1)
2 => int 100
1 =>
array (size=3)
0 => string 'c' (length=1)
1 => int 200
2 => string 'E' (length=1)
2 =>
array (size=3)
0 => boolean false
1 => float 0.03
2 => boolean true
A B 100
C 200 E
0.03 1
1차원 배열과 마찬가지로 2차원 배열도 선언하면서 동시에 배열 요소를 초기화할 수 있다.
2.3 2차원 배열과 반복문
<?php
// 1차원 배열을 3개 갖는 2차원 배열 선언
$arr = array(
array(1, 2, 3),
array(4, 5, 6),
array(7, 8, 9)
);
for($row = 0; $row < count($arr); $row++){
for($column = 0; $column < count($arr[$row]); $column++){
echo $arr[$row][$column]." ";
}
}
?>
// result
1 2 3 4 5 6 7 8 9
3. 연관 배열
PHP에서는 숫자뿐만 아니라 문자열도 배열 요소의 인덱스로 사용할 수 있다. 다른 언어에서 Hash Map, Dictionary와 비슷하다.
만약, 정수와 문자열 이외에 다른 타입의 값을 키 값으로 사용하면, 내부적으로 정수와 문자열로 타입 변환이 이루어진다. 연관 배열을 생성하는 방법은 정수를 인덱스를 하는 배열을 생성하는 방법과 동일하다.
3.1 연관 배열의 참조
연관 배열의 각 요소를 참조하고 싶을 때는 배열 이름과 함께 키(key)를 사용하면 된다.
선언과 동시에 배열 요소를 추가하고 싶다면 다음 방식을 사용한다.
이미 생성된 연관 배열에 새로운 요소를 추가하는 것도 가능하며, 존재하지 않은 배열일 경우 새로운 배열을 만든 후 배열 요소를 추가한다.
<?php
$arr = array("A" => 100, "B" => 20);
$arr["C"] = 2000;
var_dump($arr);
?>
// result
array (size=3)
'A' => int 100
'B' => int 20
'C' => int 2000
3.2 루프를 이용한 연관 배열로의 접근
<?php
$arr = array("A" => 100, "B" => 20, "C" => 30);
echo "foreach 사용<br />";
foreach ($arr as $key => $value) {
echo $key."=>".$value."<br />";
}
echo "<br />";
echo "each 사용<br />";
while($element = each($arr)) {
echo $element["key"]."=>".$element["value"]."<br />";
}
?>
// result
foreach 사용
A=>100
B=>20
C=>30
each 사용
A=>100
B=>20
C=>30
참고
댓글