제목:

PHP 배열 합치고 나누기

날짜: Posted on

이 포스트에서는 PHP에서 배열을 합치고 나누는 법을 설명합니다.

우선, 단순히 배열을 합치는 것은 array_merge() 함수 하나면 충분합니다. 아래 코드를 봅시다.

<?php
header("Content-Type: text/plain");

$South_Korea = array('서울경기','강원도','충청도','경상도','전라도');
$North_Korea = array('황해도','평안도','함경도');

print_r($South_Korea);
print_r($North_Korea);

$Unified_Korea = array_merge($South_Korea,$North_Korea);
print_r($Unified_Korea);
?>

이 코드의 실행 결과는 다음과 같습니다.

Array
(
    [0] => 서울경기
    [1] => 강원도
    [2] => 충청도
    [3] => 경상도
    [4] => 전라도
)
Array
(
    [0] => 황해도
    [1] => 평안도
    [2] => 함경도
)
Array
(
    [0] => 서울경기
    [1] => 강원도
    [2] => 충청도
    [3] => 경상도
    [4] => 전라도
    [5] => 황해도
    [6] => 평안도
    [7] => 함경도
)

이 경우는 단순히 앞뒤로 합친 경우입니다. 중간에 끼워넣거나 기존 배열을 잘라 새 배열로 배당하거나 할 때는 조금 차이가 있습니다. 이 경우 array_splice() 함수를 사용합니다. 다음 코드도 봅시다.

<?php
header("Content-Type: text/plain");

$foo = array('A','B','C','D','E','F','G');
$bar = array_splice($foo, 2, 3, array('X','Y','Z'));

print_r($foo);
print_r($bar);
?>

이 코드의 실행 결과는 다음과 같습니다.

Array
(
    [0] => A
    [1] => B
    [2] => X
    [3] => Y
    [4] => Z
    [5] => F
    [6] => G
)
Array
(
    [0] => C
    [1] => D
    [2] => E
)

이 코드는 배열 $foo에서 앞의 두 원소를 건너뛰고 세 번째 원소(2번 원소)부터 3개를 잘라내어 배열 $bar로 한 다음, 그 자리에 원소 'x','y','z'로 이루어진 배열을 집어넣는 것입니다. 떼어낼 원소 수와 새로 끼울 원소 수는 같지 않아도 됩니다.
참고로 위 코드에서 2 대신 -5를 집어넣어도 같은 결과가 나옵니다. 두 번째 인자를 음수 -n으로 주면 배열 끝에서부터 n번째에서 잘라내기가 시작됩니다.

다음 코드도 봅시다.

<?php
header("Content-Type: text/plain");

$foo = array('A','B','C','D','E','F','G');
array_splice($foo, 2, 3);
print_r($foo);

$foo = array('A','B','C','D','E','F','G');
array_splice($foo, 2, 0, array('X','Y','Z'));
print_r($foo);
?>

이 코드의 실행 결과는 다음과 같습니다.

Array
(
    [0] => A
    [1] => B
    [2] => F
    [3] => G
)
Array
(
    [0] => A
    [1] => B
    [2] => X
    [3] => Y
    [4] => Z
    [5] => C
    [6] => D
    [7] => E
    [8] => F
    [9] => G
)

5번 줄처럼 네 번째 인자를 주지 않으면, 기존 배열의 원소들을 들어낸 자리에 새로운 원소가 추가되지 않습니다. 또한, 9번 줄처럼 세 번째 인자를 0으로 주면, 기존 배열의 원소를 들어내지 않고 그 자리에 새로운 원소를 추가합니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다