제목:

PHP에서 배열의 특정 원소 삭제하기

날짜: Posted on

이 포스트에서는 PHP에서 배열의 특정 원소를 삭제하는 방법을 설명합니다.

PHP에서 배열을 다루다 보면 특정 원소를 삭제해야 할 상황이 발생할 수 있습니다. 이 경우 여러 방법이 있지만, 간단하게 처리할 수 있는 방법은 두 가지입니다. 하나는 unset() 함수를 사용하는 것이고, 다른 하나는 array_splice() 함수를 사용하는 것입니다.

일단, 아래의 코드를 봅시다.

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

$LE_SSERAFIM = array('사쿠라','김채원','허윤진','카즈하','김가람','홍은채',);
unset($LE_SSERAFIM[4]);
echo implode(', ', $LE_SSERAFIM) . "\n";

$LE_SSERAFIM = array('사쿠라','김채원','허윤진','카즈하','김가람','홍은채',);
array_splice($LE_SSERAFIM, 4, 1);
echo implode(', ', $LE_SSERAFIM) . "\n";
?>

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

사쿠라, 김채원, 허윤진, 카즈하, 홍은채
사쿠라, 김채원, 허윤진, 카즈하, 홍은채

둘 다 4번 원소가 제거되었음을 알 수 있습니다. 이렇게 보기에는 둘이 같아 보이지만, 실제로는 차이가 있습니다. 이 코드를 아래처럼 바꿔 보겠습니다.

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

$LE_SSERAFIM = array('사쿠라','김채원','허윤진','카즈하','김가람','홍은채',);
unset($LE_SSERAFIM[4]);
print_r($LE_SSERAFIM);

$LE_SSERAFIM = array('사쿠라','김채원','허윤진','카즈하','김가람','홍은채',);
array_splice($LE_SSERAFIM, 4, 1);
print_r($LE_SSERAFIM);
?>

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

Array
(
    [0] => 사쿠라
    [1] => 김채원
    [2] => 허윤진
    [3] => 카즈하
    [5] => 홍은채
)
Array
(
    [0] => 사쿠라
    [1] => 김채원
    [2] => 허윤진
    [3] => 카즈하
    [4] => 홍은채
)

차이가 보이십니까? unset() 함수로 삭제했을 경우 삭제한 원소 번호가 결번으로 남지만, array_splice() 함수로 삭제했을 경우 삭제한 원소 번호가 그 뒷번호의 원소로 채워집니다.

이 차이는 배열을 JSON으로 변환시에도 나타나는데, 아래 코드를 봅시다.

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

$LE_SSERAFIM = array('사쿠라','김채원','허윤진','카즈하','김가람','홍은채',);
unset($LE_SSERAFIM[4]);
echo json_encode($LE_SSERAFIM, JSON_UNESCAPED_UNICODE) . "\n";

$LE_SSERAFIM = array('사쿠라','김채원','허윤진','카즈하','김가람','홍은채',);
array_splice($LE_SSERAFIM, 4, 1);
echo json_encode($LE_SSERAFIM, JSON_UNESCAPED_UNICODE) . "\n";
?>

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

{"0":"사쿠라","1":"김채원","2":"허윤진","3":"카즈하","5":"홍은채"}
["사쿠라","김채원","허윤진","카즈하","홍은채"]

json_encode() 함수를 이용하여 배열을 JSON으로 변환할 때 배열 키가 0번부터 순서대로 있으면 JSON_FORCE_OBJECT 인자를 주지 않는 이상 일반 배열로 보고 변환하지만, 그렇지 않고 다음 조건 중 하나에 걸리게 되면 객체로 보고 변환합니다.

  1. 숫자가 아닌 배열 키가 존재할 경우 (예: ‘name’)
  2. 배열 순서가 중간에 뒤틀린 경우 (예: 0, 1, 3, 2)
  3. 배열 키 중에 빠진 숫자가 존재할 경우 (예: 0, 1, 2, 4)
  4. 배열 키 숫자가 0이 아닌 숫자부터 시작할 경우 (예: 1, 2, 3, 4)

unset() 함수로 배열을 삭제하여 중간에 빠진 번호를 만들게 되면 조건 C에 걸리게 되고 그로 인해 JSON 변환시 일반 배열이 아닌 객체로 변환되는 결과가 나옵니다.

답글 남기기

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