본문 바로가기
PHP

PHP array

by FraisGout 2020. 7. 2.

배열(array)이란?

PHP에서 배열(array)은 맵(map)으로 이루어진, 순서가 있는 집합을 의미합니다.

 

(map)은 한 쌍의 키(key)와 값(value)으로 이루어져 있습니다.

 

이때 배열을 구성하는 각각의 맵을 배열 요소(array element)라고 합니다.

 

배열은 데이터를 많이 다뤄야 하는 경우 사용할 수 있는 가장 기본적인 자료 구조입니다.

 

 

PHP 배열에는 다음과 같이 세 가지 종류가 있습니다.

 

 

 

1. 1차원 배열

 

2. 다차원 배열

 

3. 연관 배열

 

1차원 배열

1차원 배열은 가장 기본적인 배열로 다음과 같은 문법에 따라 선언됩니다.

 

문법

$배열이름 = array();

 

 

 

PHP에서는 array()라는 함수를 이용해 배열을 생성합니다.

 

배열 이름은 배열을 선언한 후에 해당 배열에 접근하기 위해 사용합니다.

 

배열 요소의 참조

PHP에서는 배열 요소에 접근하기 위해 인덱스(index)를 사용합니다.

 

PHP는 대부분의 다른 프로그래밍 언어와 마찬가지로 0부터 시작하는 숫자 인덱스를 지원합니다.

 

 

 

배열의 각 요소를 참조하고 싶을 때는 [] 연산자를 사용합니다.

 

문법

$배열이름[인덱스]

 

 

 

PHP에서는 인덱스로 숫자뿐만 아니라 문자열을 사용할 수도 있습니다.

 

 

 

인덱스로 문자열을 사용하는 배열을 연관 배열(associative array)이라고 합니다.

 

배열 요소의 추가

PHP에서는 인덱스를 이용하여 배열에 요소를 추가할 수 있습니다.

 

 

 

다음 예제는 배열을 생성하고, 인덱스를 이용하여 배열 요소를 추가하는 예제입니다.

 

)

$arr = array(); // 배열 생성

$arr[0] = "apple"; // 배열 요소 추가

$arr[1] = "banana";

$arr[2] = "orange";

 

또한, 배열을 생성하면서 동시에 배열 요소를 초기화할 수 있습니다.

 

문법

$배열이름 = array(배열요소1, 배열요소2, ...);

 

 

 

이 방법을 사용하면 초기화 리스트에 따라 각각의 배열 요소가 순서대로 추가된 배열이 생성됩니다.

 

 

 

다음 예제는 앞선 예제와 같은 배열을 생성과 동시에 초기화하는 예제입니다.

 

)

 

 

$arr = array("apple", "banana", "orange"); // 배열 생성과 동시에 초기화

 

만약 해당 배열이 존재하지 않으면, 해당 이름으로 새로운 배열을 만든 후에 배열 요소를 추가합니다.

 

)

$arr[0] = "apple"; // 배열이 존재하지 않으므로, 먼저 배열을 생성한 후에 요소가 추가됨.

$arr[1] = "banana";

$arr[2] = "orange";

 

이때 배열 요소의 인덱스를 생략할 수 있는데, 이 경우에는 인덱스가 0부터 시작하여 1씩 증가하며 순서대로 저장됩니다.

 

)

$arr[] = "apple"; // 배열 인덱스를 생략하여, 순서대로 배열에 추가됨.

$arr[] = "banana";

$arr[] = "orange";

코드를 명확하게 하고 오류를 피하기 위해서는 배열을 먼저 선언해주는 것이 바람직합니다.

 

배열의 홀(hole)

PHP에서는 배열의 특정 인덱스에만 배열 요소를 추가할 수 있습니다.

 

)

$arr = array(); // 배열의 생성

 

$arr[10] = "banana"; // 인덱스 10에만 배열 요소를 추가함.

 

 

 

var_dump($arr);

 

var_dump($arr[0]); // NULL

 

var_dump(isset($arr[0])); // false

 

var_dump(isset($arr[10])); // true

위의 예제에서 배열 요소가 존재하는 인덱스는 10뿐이며, 나머지 인덱스에는 배열 요소가 존재하지 않습니다.

 

이렇게 인덱스에 대응하는 배열 요소가 없는 부분을 배열의 홀(hole)이라고 합니다.

 

PHP에서 이러한 배열의 홀(hole)을 참조하게 되면. 초기화되지 않은 변수를 참조할 때처럼 NULL을 반환합니다.

isset() 함수는 인수로 전달받은 변수가 초기화되어 있는지를 확인해 줍니다.

 

루프를 이용한 배열로의 접근

for 문을 사용하면 배열의 인덱스를 이용하여 더욱 쉽고 간단하게 배열 요소에 접근할 수 있습니다.

 

)

$arr = array("apple", "banana", "orange");

for($i = 0; $i < count($arr); $i++){

echo $arr[$i]."<br>";

}

count() 함수는 배열의 모든 요소의 개수를 반환하는 함수입니다.

 

하지만 앞서 살펴본 홀(hole)을 가지는 배열에서는 for 문을 사용하면 모든 배열 요소에 접근할 수 없습니다.

 

따라서 PHP에서는 특별한 반복문인 foreach 문을 제공하여 for 문보다 간편하게 배열 요소에 접근할 수 있도록 해줍니다.

 

)

$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)을 포함하지 않습니다.

 

따라서 홀을 가지는 배열에서는 정확한 배열의 길이를 구할 수 없습니다.

 

하지만 foreach 문을 사용하면 예제와 같이 홀이 아닌 배열 요소에만 정확히 접근할 수 있습니다.

 

다차원 배열(multidimensional array)

다차원 배열은 2차원 이상의 배열을 의미하며, 배열 요소로 또 다른 배열을 사용합니다.

 

2차원 배열을 이해하면 그 이상의 배열 또한 같은 방식으로 이해할 수 있습니다.

 

2차원 배열

2차원 배열이란 배열 요소로 또 다른 1차원 배열을 사용하는 배열을 의미합니다.

 

 

 

2차원 배열은 다음과 같은 문법에 따라 선언됩니다.

 

문법

$배열이름 = array(

array(),

array(),

...

);

 

 

 

2차원 배열은 1차원 배열과 같이 array() 함수를 사용하여 선언합니다.

 

1차원 배열과 다른 점은 array() 함수를 한 번 더 사용하여, 배열 요소에 또 다른 1차원 배열을 생성한다는 점입니다.

 

 

 

2차원 배열은 행과 열을 가진 행렬과 같은 모양으로 구성됩니다.

 

1차원 배열의 개수만큼 행의 수가 늘어나고, 열의 수는 각 1차원 배열의 배열 요소 개수로 정해집니다.

 

2차원 배열 요소 입력

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]";

 

1차원 배열과 마찬가지로 2차원 배열을 생성하면서 동시에 배열 요소를 초기화할 수도 있습니다.

 

문법

$배열이름 = array(

array(배열요소00, 배열요소01, ...),

array(배열요소10, 배열요소11, ...),

...

);

 

 

 

다음 예제는 앞선 예제와 같은 2차원 배열을 생성과 동시에 초기화하는 예제입니다.

 

)

$arr = array( // 1차원 배열을 3개 갖는 2차원 배열 선언과 동시에 초기화

array("apple", "korea", 1000),

array("banana", "philippines", 2000),

array("orange", "us", 1500)

);

 

루프를 이용한 2차원 배열로의 접근

2차원 배열도 1차원 배열과 마찬가지로 for 문에 배열의 인덱스를 이용하여 배열 요소에 접근할 수 있습니다.

 

하지만 2차원 배열에서는 1차원 배열과는 달리 행과 열에 대해 for 문을 2번 사용해야 합니다.

 

)

for($row = 0; $row < 3; $row++) {

for($column = 0; $column < count($arr[$row]); $column++){

echo $arr[$row][$column].", ";

}

}

 

3차원 배열

3차원 배열은 배열 요소로 2차원 배열을 사용하는 배열을 의미합니다.

 

 

 

3차원 배열은 다음과 같은 문법에 따라 선언됩니다.

 

문법

$배열이름 = array(

array(

 

array(),

 

array(),

 

...

 

),

array(

 

array(),

 

array(),

 

...

 

),

...

);

 

 

 

1, 2차원 배열과 마찬가지로 3차원 배열도 생성과 동시에 초기화할 수 있습니다.

 

문법

$배열이름 = array(

array(

 

array(배열요소000, 배열요소 001, ...),

 

array(배열요소010, 배열요소 011, ...),

 

...

 

),

array(

 

array(배열요소100, 배열요소 101, ...),

 

array(배열요소110, 배열요소 111, ...),

 

...

 

),

...

);

 

 

 

간단히 생각해서 3차원 배열은 가로와 세로 거기에 높이까지 가진 정육면체 모양으로 생각할 수 있습니다.

 

)

$arr = array( // 2차원 배열을 2개 갖는 3차원 배열 선언과 동시에 초기화

array(

array("apple", "korea", 1000),

array("banana", "philippines", 2000),

array("orange", "us", 1500)

),

array(

array("carrot", "vietnam", 500),

array("cucumber", "korea", 1000),

array("pumpkin", "china", 2000)

)

);

위와 같은 방식으로 4차원과 5차원 이상의 배열도 만들 수 있지만, 현실에서는 이해하기 쉬운 2차원 배열까지만 사용합니다.

 

연관 배열(associative array)

PHP에서는 숫자뿐만 아니라 문자열도 배열 요소의 인덱스로 사용할 수 있습니다.

 

만약 정수와 문자열 이외에 다른 타입의 값을 키값으로 사용하면, 내부적으로 정수와 문자열로 타입 변환이 이루어집니다.

 

연관 배열(associative array)은 이처럼 배열의 인덱스를 정수뿐만이 아닌 다양한 타입으로 설정한 배열을 의미합니다.

 

이러한 연관 배열을 사용하면 키값에 좀 더 명확한 의미를 부여할 수 있습니다.

 

 

 

연관 배열을 생성하는 방법은 정수를 인덱스로 하는 배열을 생성하는 방법과 같습니다.

 

문법

$배열이름 = array();

 

연관 배열의 참조

연관 배열의 각 요소를 참조하고 싶을 때는 배열 이름과 함께 키(key)를 사용하면 됩니다.

 

연관 배열에 특정 키값으로 값을 저장하는 방법은 다음과 같습니다.

 

문법

$배열이름[""] = ;

 

 

 

)

$array = array(); // 배열 생성

$array["apple"] = 1000; // 연관 배열 요소 추가

$array["banana"] = 2000;

$array["orange"] = 1500;

 

또한, 연관 배열을 생성하면서 동시에 배열 요소를 초기화할 수도 있습니다.

 

이때는 키와 값 사이에 '=>'를 넣어 주어 배열 요소에 저장될 키와 값을 지정할 수 있습니다.

 

이 방법을 사용하면 초기화 리스트에 따라 각각의 배열 요소가 순서대로 추가된 배열이 생성됩니다.

 

문법

$배열이름 = array("1" => 1, "2" => 2, ...);

 

 

 

다음 예제는 앞선 예제와 같은 배열을 생성과 동시에 초기화하는 예제입니다.

 

)

// 연관 배열 생성과 동시에 초기화

 

$array = array("apple" => 1000, "banana" => 2000, "orange" => 1500);

echo $array["apple"].", ".$array["banana"].", ".$array["orange"];

 

또한, 생성된 연관 배열에 새로운 요소를 추가할 수도 있습니다.

 

)

$array = array("apple" => 1000); // 연관 배열 생성과 동시에 초기화

$array["banana"] = 2000; // 생성된 연관 배열에 요소 추가

$array["orange"] = 1500;

 

만약 해당 배열이 존재하지 않으면, 해당 이름으로 새로운 배열을 만든 후에 배열 요소를 추가합니다.

 

)

$array["apple"] = 1000; // 배열이 존재하지 않으므로, 먼저 배열을 생성한 후에 요소가 추가됨.

$array["banana"] = 2000;

$array["orange"] = 1500;

echo $array["apple"].", ".$array["banana"].", ".$array["orange"];

 

루프를 이용한 연관 배열로의 접근

연관 배열의 인덱스는 숫자가 아니므로, for 문을 사용하여 배열 요소에 접근할 수 없습니다.

 

대신에 foreach 문이나 each() 함수를 사용하여 접근해야 합니다.

 

 

 

foreach 문을 사용하면 연관 배열 요소의 키값과 요소의 값을 변수에 따로 저장하여 루프 내에서 사용할 수 있습니다.

 

)

$array = array("apple" => 1000, "banana" => 2000, "orange" => 1500);

 

 

foreach ($array as $key => $value) {

echo $key." ".$value."<br>";

}

 

each() 함수는 배열 커서(array cursor)가 현재 가리키고 있는 배열 요소를 반환하고, 다음 배열 요소를 가리키도록 합니다.

 

이 함수는 가리키는 요소의 다음 요소가 배열의 마지막 요소라면 더는 동작하지 않습니다.

 

 

 

)

$array = array("apple" => 1000, "banana" => 2000, "orange" => 1500);

 

 

while($element = each($array)) {

echo $element['key']." ".$element['value']."<br>";

}

'PHP' 카테고리의 다른 글

PHP 내장함수  (0) 2020.07.02
PHP function  (0) 2020.07.02
PHP expressions  (0) 2020.07.02
PHP operator  (0) 2020.07.02
PHP 기초  (0) 2020.07.02

댓글