개발 꿀팁/PHP

php explode를 사용하여 문자열을 분할하는 것은 초보자들이 쉽게 간과할 수 있는 문제

Jammie 2022. 8. 24. 14:51
반응형

1.explode 방법 설명
explode 방법은 하나문자열은 어느 하나의 문자열을 경계점으로 하여 배열로 분할한다

array explode ( string $delimiter , string $string [, int $limit ] )

문자열로 구성된 배열을 반환합니다. 각 요소는 string의 하위 문자열로, 문자열 delimiter에 의해 경계점으로 분할됩니다.

매개 변수 설명:
델리미터
경계에 있는 구분 문자입니다.

스트링
입력한 문자열

리미트
limit 매개 변수가 설정되어 있고 양수이면 반환되는 배열은 최대 limit 요소를 포함하고 마지막 요소는 string을 포함합니다.잉여분.
limit 파라미터가 음수일 경우 마지막 -limit 요소를 제외한 모든 요소를 반환합니다.
리미트가 0이면 1로 간주된다.



2.예
문자열 사용, 분할

<?php
$str = '1,2,3,4,5,6,7,8,9';
$arr = explode(',', $str);
echo '<pre>';
print_r($arr);
echo '</pre>';
?>

출력:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
    [7] => 8
    [8] => 9
)

사용, 분할 문자열, limit은 양수

<?php
$str = '1,2,3,4,5,6,7,8,9';
$arr = explode(',', $str, 5);
echo '<pre>';
print_r($arr);
echo '</pre>';
?>

출력:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5,6,7,8,9
)

사용, 문자열 분할, limit 음수

<?php
$str = '1,2,3,4,5,6,7,8,9';
$arr = explode(',', $str, -3);
echo '<pre>';
print_r($arr);
echo '</pre>';
?>

출력:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
)

사용, 문자열 분할, limit 0

<?php
$str = '1,2,3,4,5,6,7,8,9';
$arr = explode(',', $str,0);
echo '<pre>';
print_r($arr);
echo '</pre>';
?>

출력:

Array
(
    [0] => 1,2,3,4,5,6,7,8,9
)

3.무시하기 쉬운 문제
보통 우리는 exp를 사용합니다.lode는 ID 문자열과 같은 데이터를 분할합니다

<?php
$ids = '1,2,3,4';
$data = explode(',', $ids);
if($data){
    foreach($data as $k=>$v){
        // do sth
    }
}
?>

if(data)를 판단하기 때문에 통상 ids가 비어 있지 않고 코드를 봐도 별 문제가 없다.
그러나 실제로는 ids=null, data가 비어 있지 않아 foreach에서 실행되는 코드에 문제가 생길 수 있다

<?php
$ids = null;
$data = explode(',', $ids);
if($data){
    print_r($data);
}else{
    echo 'null';
}
?>

ids=null이기 때문에 explode로 분할하여 얻은 배열은 Array()가 아닌 Array([0]=>)이다.

그래서 좀 수정을 해야 문제를 피할 수 있다고 판단했습니다

<?php
$ids = null;
$data = explode(',', $ids);
if(isset($data[0]) && $data[0]){
    foreach($data as $k=>$v){
        // do sth
    }
}
?>
반응형