본문 바로가기

프로그래밍 공부/PHP

PHP - 배열 조작

배열을 생성하는 방법

배열을 생성하는 방법에는 array 함수 또는 []를 사용해 생성한다.

  1. array 함수는 문자열 또는 변수를 인수로 지정하고 배열을 생성할 수 있다. 
  2. 배열은 인덱스를 지정하여 생성할 수도 있다.
  3. 배열을 초기화하려면(배열 내에 있던 기존의 데이터를 모두 삭제) array 함수에 인수를 지정하지 않고 실행한다.
  4. 인덱스를 생략하고 데이터를 추가하게 되면 이때 시점의 최대 인덱스에 1을 더한 수가 인덱스가 된다.  
  5. array 함수에 키와 데이터를 지정하면 연관 배열을 생성할 수 있다. 또한 인덱스 대신 키를 지정해도 연관 배열을 생성할 수도 있다.
  6. 데이터베이스에서 데이터를 가져올 때 이용하는 배열은 다차원 배열이다.

여러가지 배열을 생성하는 방법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
    // 여러가지 배열을 생성하는 방법
    // array 함수로 배열 생성
    $arr1 = array("문자열0","문자열1","문자열2");
 
    // 인덱스를 지정하여 배열 생성
    $arr2[0= "문자열0";
    $arr2[1= "문자열1";
    $arr2[2= "문자열2";
 
    // 인덱스를 생략하여 배열 생성
    $arr3 = array();
    $arr3[] = "문자열0";
    $arr3[] = "문자열1";
    $arr3[] = "문자열2";
 
    // array 함수에 키와 데이터를 지정하여 연관 배열을 생성
    $arr4 = array("키0" => "문자열0","키1" => "문자열1","키2" => "문자열2");
 
    // 키를 지정하여 연관 배열을 생성
    $arr5["키0"= "문자열0";
    $arr5["키1"= "문자열1";
    $arr5["키2"= "문자열2";
 
    // 다차원 배열을 생성
    $arr6[0= array("키0" => "문자열0","키1" => "문자열1","키2" => "문자열2");
    $arr6[1= array("키0" => "문자열0","키1" => "문자열1","키2" => "문자열2");
    $arr6[2= array("키0" => "문자열0","키1" => "문자열1","키2" => "문자열2");
?>
cs

배열의 데이터를 모두 변수에 할당하는 방법

배열이 가지고 있는 데이터는 순서대로 변수에 넣을 수 있다. 이런 방법은 변수에서 여러 개의 값을 돌려받을 때 이용한다.

1
2
3
4
5
6
7
8
9
10
11
12
<?php
    //배열에 데이터를 모두 변수에 할당하는 방법
    $data = array("사과","귤","감");
    
    // list 함수를 이용해 배열에 데이터를 변수에 할당
    list($fruit0,$fruit1,$fruit2= $data;
 
    // 위의 코드와 동일한 코드
    $fruit0 = $data[0];
    $fruit1 = $data[1];
    $fruit2 = $data[2];
?>
cs

배열 안의 데이터 정렬

오름차순/내림차순 정렬하는 방법

PHP에서 배열 내부의 인수들을 오름차순/내림차순으로 정렬하는 방법은 JavaScript와 약간 다른데 JavaScript에서는 sort 함수 하나만으로 사용하지만 PHP에서는 sort 함수와 rsort로 오름차순/내림차순 정렬이 나뉘어져 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
    // 오름차순으로 배열을 정렬하는 방법
    $number1 = array(2,3,6,5,4,1,7,9,8,0);
    sort($number1);
    
    print "<pre>";
    print_r($number1);
    print "</pre>";
 
    // 내림차순으로 배열을 정렬하는 방법
    $number2 = array(4,3,2,6,8,1,0,9,7,5);
    rsort($number2);
 
    print "<pre>";
    print_r($number2);
    print "</pre>";
?>
cs

아래는 JavaScript에서 오름차순/내림차순 정렬을 하는 방법이다. 차이점을 확인해 본다.

1
2
3
4
5
6
7
8
9
10
<script>
    // 자바스크립트에서는?
    let array = [2,3,6,5,4,1,7,9,8,0];
 
    // 오름차순 정렬
    array.sort((a, b) => a - b);
 
    // 내림차순 정렬
    array.sort((a, b) => b - a);
</script>
cs

PHP는 위의 방법 외에도 flag를 지정해 정렬하는 방법도 있다.

flag 의미
SORT_REGULAR 타입을 변환하지 않고 일반적인 방법으로 비교
SORT_NUMERIC 데이터를 숫자로 취급하여 비교
SORT_STRING 데이터를 문자열로 취급하여 비교
SORT_LOCALE_STRING 데이터를 현재 로케일에 기반한 문자열로 취급하여 비교
SORT_NATURAL natsort()와 같은 정렬 알고리즘을 이용하여 비교
SORT_FLAG_CASE 데이터를 대소문자 구별 없이 비교(SORT_STRING, SORT_NATURAL, 비트 OR로 묶어 비교)

sort($변수, flag); 또는 rsort($배열, flag);와 같이 실행할 수 있다. flag는 위의 표를 참고한다. 이것은 '숫자'를 정렬할 때 수치 정렬이나, 문자 정렬로 결과가 바뀔 수 있지만, 의도대로 정렬하기 위해 사용한다.

연관 배열 안의 데이터 정렬

오름차순/내림차순으로 데이터 또는 키를 정렬하는 방법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
    // 연관 배열에서 오름차순으로 데이터 정렬하는 방법
    $sales1 = array("TV2" => "1000","TV1" => "500","RADIO1" => "800");
    assort($sales1);
    
    print "<pre>";
    print_r($sales1);
    print "</pre>";
 
    // 연관 배열에서 내림차순으로 데이터 정렬하는 방법
    $sales2 = array("TV2" => "1000","TV1" => "500","RADIO1" => "800");
    arsort($sales2);
 
    print "<pre>";
    print_r($sales2);
    print "</pre>";
 
    // 연관 배열에서 오름차순으로 키 정렬하는 방법
    $sales3 = array("TV2" => "1000","TV1" => "500","RADIO1" => "800");
    ksort($sales3);
 
    print "<pre>";
    print_r($sales3);
    print "</pre>";
 
    // 연관 배열에서 내림차순으로 키 정렬하는 방법
    $sales4 = array("TV2" => "1000","TV1" => "500","RADIO1" => "800");
    krsort($sales4);
 
    print "<pre>";
    print_r($sales4);
    print "</pre>";
?>
cs

배열에 데이터를 추가/제거

배열의 끝/앞에 데이터를 추가/제거 하는 방법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
    // 배열의 데이터 추가/제거하는 방법
    // 배열의 끝에 데이터를 추가하는 방법
    $data1 = array("사과","귤","감");
    array_push($data1,"없음","수박");
 
    print "<pre>";
    print_r($data1);
    print "</pre>";
 
    // 배열의 끝에 데이터를 제거하는 방법
    $data2 = array("사과","귤","감");
    array_pop($data2);
 
    print "<pre>";
    print_r($data2);
    print "</pre>";
 
    // 배열의 앞에 데이터를 추가하는 방법
    $data3 = array("사과","귤","감");
    array_unshift($data3,"파파야","키위");
 
    print "<pre>";
    print_r($data3);
    print "</pre>";
 
    // 배열의 앞에 데이터를 제거하는 방법
    $data4 = array("사과","귤","감");
    array_shift($data4);
 
    print "<pre>";
    print_r($data4);
    print "</pre>";
?>
cs

배열의 결합과 잘라내기

배열끼리 결합/잘라내는 방법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
    // 배열의 결합과 잘라내는 방법
    // 배열을 결합하는 방법
    $pre_array1 = array("TV1" => "500","TV2" => "1000","RADIO1" => "800");
    $new_array1 = array("TV1" => "2000","RADIO2" => "600");
 
    $result1 = array_merge($pre_array1,$new_array1);
    print "<pre>";
    print_r($result1);
    print "</pre>";
 
    // 배열을 잘라내는 방법
    $alpha = array("A","B","C","D","E");
    print implode(',',$alpha).'<br>';
    
    // A,B,C,D를 잘라냄
    $result2 = array_slice($alpha,0,4);
    print implode(',',$result2).'<br>';
 
    // C를 잘라냄(시작위치가 음수면 배열의 끝에서부터 헤아림)
    $result2 = array_slice($alpha,-3,1);
    print implode(',',$result2).'<br>';
 
    // D를 잘라냄(길이가 음수면 배열의 끝에서부터 '길이'만큼 앞으로 이동한 위치까지 잘라냄)
    $result2 = array_slice($alpha,3,-1);
    print implode(',',$result2).'<br>';
 
    // C,D,E를 잘라냄('길이'가 없는 경우 시작위치부터 배열의 마지막까지 잘라냄)
    $result2 = array_slice($alpha,2);
    print implode(',',$result2).'<br>';
?>
cs

기타 함수

데이터 반전하는 방법

1
2
3
4
5
6
7
8
9
<?php
    // 데이터를 반전하는 방법
    $origin = array("A","B","C","D","E");
    $result3 = array_reverse($origin);
 
    print "<pre>";
    print_r($result3);
    print "</pre>";
?>
cs

배열 조작 함수 정리

함수 이름 함수 형태 함수 설명
list list($변수1, 변수2, 변수3) = $배열; 데이터를 변수에 할당
sort sort($배열); 오름차순 정렬
rsort rsort($배열); 내림차순 정렬
assort assort($배열); 데이터 오름차순 정렬
arsort arsort($배열); 데이터 내림차순 정렬
ksort ksort($배열); 키 오름차순 정렬
krsort krsort($배열); 키 내림차순 정렬
array_push array_push($배열, "추가문자열"); / array_push($배열, $추가변수); 배열 끝에 데이터 추가
array_pop $변수 = array_pop($배열); 배열 끝에 데이터 제거
array_unshift array_unshift($배열, "추가문자열"); / array_unshift($배열, $추가변수); 배열 앞에 데이터 추가
array_shift $변수 = array_shift($배열); 배열 앞에 데이터 제거
array_merge $배열 = array_merge($기존배열, $추가배열); 배열 결합
array_slice $배열 = array_slice($기존배열, 시작위치, 길이); 배열 잘라내기
array_reverse $배열 = array_reverse($기존배열); 데이터 반전