PHP 배열
배열(array) 이란?
PHP에서 배열(array)은 맵(map)으로 이루어진, 순서가 있는 집합을 의미
map은 key와 value로 이루어짐
배열은 데이터를 많이 다뤄야 하는 경우 사용할 수 있는 가장 기본적인 자료 구조
1. 1차원 배열
2. 다차원 배열
3. 연관 배열
1 차원 배열
1차원 배열은 가장 기본적인 배열
$배열이름 = array();
PHP 에서는 array()라는 함수를 이용해 배열을 생성
배열 요소의 참조
PHP에서는 배열 요소에 접근하기 위해 인덱스(index)를 사용
PHP는 대부분의 다른 프로그래밍 언어와 마찬가지로 0부터 시작하는 숫자 인덱스 지원
[]연산자 사용
$배열이름[인덱스]
PHP에서는 숫자뿐만 아니라 문자열을 사용할 수 있음
인덱스로 문자열을 사용하는 배열을 "연관 배열" 이라고 함
배열 요소의 추가
PHP에서는 인덱스를 이용하여 배열에 요소를 추가
$arr = array(); // 배열 생성
$arr[0] = "apple"; // 배열 요소 추가
$arr[1] = "banana";
$arr[2] = "orange";
>>>결과
apple
banana
orange
배열을 생성하며 초기화 하는 법
$arr = array("apple","banana","orange"); //배열 생성과 동시에 초기화
배열 인덱스를 생략하고 순서대로 저장하게 하는 법
$arr[] = "apple";
$arr[] = "banana";
$arr[] = "orange";
코드를 명확하게 하고 오류를 피하기 위해서는 배열을 먼저 선언해 주는것이 좋음
배열의 홀(hole)
PHP에서는 배열의 특정 인덱스에서만 배열 요소를 추가할 수 있음
$arr = array();
$arr[10] = "banana";
var_dump($arr);
var_dump($arr[0]); //NULL
var_dump(isset($arr[0])); //false
var_dump(isset($arr[10])); //true
위의 예제에서 배열 요소가 존재하는 인덱스는 10뿐
나머지는 배열 요소 X 배열 요소가 없는 부분을 "홀" 이라고 한다.
배열의 홀을 참조하게 되면 초기화 되지 않은 변수를 참조할때 처럼 NULL 반환
>>>결과
array(1) { [10]=> string(6) "banana" }
NULL
bool(false)
bool(true) PHP Warning: Undefined array key 0 in /home/jdoodle.php on line 17
**isset() 함수는 인수로 전달받은 변수가 초기화되어 있는지를 확인해줌**
루프를 이용한 배열로의 접근
for문을 사용하면 배열의 인덱스를 이용하여 더욱 쉽게 접근 가능!
$arr = array("apple","banana","orange");
for($i=0; $i < count($arr); i++){
echo $arr[$i]."<br>";
}
>>>결과
apple
banana
orange
**count() 함수는 배열의 모든 요소의 개수를 반환하는 함수**
BUT,
홀(hole)을 가진 배열에서는 for문을 사용하면 모든 배열 요소에 접근X -> foreach문을 사용하여 접근
$arr = array(); //배열의 생성
$arr[2] = "apple";
$arr[3] = "banana";
$arr[4] = "orange";
// $arr[0]과 $arr[1]은 배열의 홀(hole)이 됨
for($i = 0; $i < count($arr); $i++){
echo "\\$arr[{$i}]: ".$arr$[$i]."<br>";
}
foreach($arr as $element){
echo $element."<br>";
}
count()함수는 배열 요소의 개수를 계산할 때 배열의 홀(hole) 을 포함X
따라서 홀을 가지는 배열에서는 정확한 배열의 길이를 구할 수 없음
foreach문을 사용하면 홀이 아닌 배열 요소에만 정확히 접근 가능
다차원 배열
다차원 배열은 2차원 이상의 배열, 배열 요소로 또 다른 배열을 사용
2차원 배열
2차원 배열이란 배열 요소로 또 다른 1차원 배열을 사용하는 배열을 의미
$배열이름 = array(
array(),
array(),
...
)
2차원 배열 요소 입력
2차원 배열도 배열 요소에 접근하기 위해서는 인덱스를 사용해야 함
[] 연산자를 두 번 사용하면 됨
$arr = array( // 1차원 배열을 3개 갖는 2차원 배열 선언
array(),
array(),
array()
);
$arr[0][0] = "apple"; // 배열 요소 입력
$arr[0][1] = "korea";
$arr[0][2] = 1000;
$arr[1][0] = "banana";
$arr[1][1] = "philippines";
$arr[1][2] = 2000;
$arr[2][0] = "orange";
$arr[2][1] = "us";
$arr[2][2] = 1500;
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]";
>>>결과
apple, korea, 1000
banana, philippines, 2000
orange, us, 1500
2차원 배열을 생성과 동시에 초기화
$arr = array(
array("apple","korea",1000),
array("banana","philippines",2000),
array("orange","us",1500)
)
루프를 이용한 2차원 배열로의 접근
for($row = 0; $row < 3; $row++){
for($column = 0; $column < count($arr[$row]); $colunm++){
echo $arr[$row][$column].",";
}
}
연관 배열
배열의 인덱스를 정수뿐만이 아닌 다양한 타입으로 설정한 배열을 의미
$배열이름 = array();
연관 배열의 참조
$배열이름["키"] = 값;
$array = array();
$array["apple"] = 1000;
$array["banana"] = 2000;
$array["orange"] = 1500;
>>>결과
1000, 2000, 1500
배열 요소를 초기화 할 수도 있음
키와 값 사이에 '=>' 를 넣어 주어 배열 요소에 저장될 키와 값을 지정할 수 있음
$배열이름 = array("키1" => 값, "키2" => 값2, ...);
// 연관 배열 생성과 동시에 초기화
$array = array("apple" => 1000, "banana" => 2000, "orange" => 1500);
echo $array["apple"].", ".$array["banana"].", ".$array["orange"];
>>>결과
1000, 2000, 1500