데이터베이스/PHP

👣PHP - ARRAY

dev_jiwon 2022. 12. 12.

PHP - ARRAY

INDEX

 

ARRAY 배열

🔥
배열은 한 쌍의 키(KEY)와 값(VALUE)으로 이루어진 맵(map)으로 구성된 순서가 없는 집합이다. 배열은 주로 연관된 데이터를 모아서 관리하기 위해 사용하는 데이터 타입이다. PHP에서의 배열은 다른 언어에서 리스트라고 하는 형태이다.

 

1차원 배열

1.1 배열 생성 및 요소 추가

배열을 생성할 때는 array()라는 함수를 이용하며, 배열 이름은 배열을 선언한 후 해당 배열에 접근하기 위해 사용한다.

🔥
$배열이름 = 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)

 

생성과 동시에 배열 요소를 초기화

🔥
$배열이름 = array(배열요소1, 배열요소2, …);
<?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에서는 배열의 특정 인덱스에만 배열 요소를 추가할 수 있다. 배열을 하나 생성해서 10번 인덱스에만 배열의 요소를 추가하고 나머지는 빈 배열로 유지해두면 어떻게 될까?

 

<?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번 인덱스에 대해서만 접근을 했다.

 

🔥
요소에만 접근해서 출력하는 방법 foreach를 사용하면 배열의 모든 요소에 접근 할 수 있다.
<?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 배열은 다른 언어에서 리스트 형태의 데이터 타입이기 때문에 배열에 요소를 추가하거나 삭제하는 것이 가능핟. 또한, 정렬과 역순 정렬도 가능하다.
<?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 정리

 

배열의 맨끝에 요소 추가
🔥
array_push($배열이름, 배열요소);

 

배열의 맨 끝에 복수 요소 추가
🔥
$배열이름 = array_merge($배열이름, [배열요소1, 배열요소2]);

 

배열의 맨 앞에 요소 추가
🔥
array_unshift($배열이름, 배열요소);

 

배열의 특정 인덱스에 요소 추가
🔥
array_splice($배열이름, 인덱스번호, 0, 배열요소);

 

배열의 특정 인덱스 기준으로 특정 길이 제거 후 요소 추가
🔥
array_splice($배열이름, 인덱스번호, 제거할길이, 배열요소);

 

배열의 맨 앞 요소 제거
🔥
array_shift($배열이름);

 

배열의 맨 뒤 요소 제거
🔥
array_pop($배열이름);

 

정렬
🔥
sort($배열이름);

 

역순정렬
🔥
rsort($배열이름);

 

 

2. 다차원 배열

🔥
다차원 배열은 2차원 이상의 배열을 의미하며, 배열 요소로 또 다른 배열을 사용하는 형태이다.

 

2.1 2차원 배열

2차원 배열이란 배열 요소로 또 다른 1차원 배열을 사용하는 배열을 의미합니다. 2차원 배열은 다음과 같은 문법에 따라 선언된다.

🔥
$배열이름 = array(

array(), array(), … );

 

2.2 2차원 배열 요소 입력

🔥
2차원 배열도 1차원 배열과 동일하게 요소에 접근하기 위해서는 인덱스를 사용해야 한다. 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차원 배열도 선언하면서 동시에 배열 요소를 초기화할 수 있다.

🔥
$배열이름 = array( array(배열요소00, 배열요소01, …), array(배열요소10, 배열요소11, …), … );

 

 

2.3 2차원 배열과 반복문

🔥
for문에 배열의 인덱스를 이용하여 배열 요소에 접근하는 것도 가능하다. 다만, 1차원 배열과 달리 행과 열에 대해 for문을 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와 비슷하다.

만약, 정수와 문자열 이외에 다른 타입의 값을 키 값으로 사용하면, 내부적으로 정수와 문자열로 타입 변환이 이루어진다. 연관 배열을 생성하는 방법은 정수를 인덱스를 하는 배열을 생성하는 방법과 동일하다.

🔥
$배열이름 = array();

 

3.1 연관 배열의 참조

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

🔥
$배열이름[”키”] = 값;

 

선언과 동시에 배열 요소를 추가하고 싶다면 다음 방식을 사용한다.

🔥
$배열이름 = array(”키1” ⇒ 값1, “키2” ⇒ 값2, …);

 

이미 생성된 연관 배열에 새로운 요소를 추가하는 것도 가능하며, 존재하지 않은 배열일 경우 새로운 배열을 만든 후 배열 요소를 추가한다.

<?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 루프를 이용한 연관 배열로의 접근

🔥
인덱스가 숫자가 아니므로, for문을 사용하여 배열 요소에 접근은 불가능하다. 대신 foreach문이나 each() 함수를 사용하여 접근해야 한다.
<?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

 

 

 

 

참고

[PHP] 기본 문법 정리 (3) (feat. 배열)
배열은 주로 연관된 데이터를 모아서 관리하기 위해 사용하는 데이터 타입입니다. PHP에서의 배열은 다은 언어에서 리스트 라고도 하는 형태입니다! 😎😎 1.1. 배열 생성 및 요소 추가 배열을 생성할 때는 array()라는 함수를 이용하며, 배열 이름은 배열을 선언한 후 해당 배열에 접근하기 위해 사용합니다. $배열이름 = array(); 배열의 요소에 접근하기 위해서는 인덱스(index)를 사용하는데, 0부터 시작하는 숫자 인덱스를 지원합니다.
https://subin-0320.tistory.com/131

 

댓글