PHP

PHP 배열

starryoon 2023. 6. 8. 23:30

배열(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