Webi Blog

웹아이에서 운영되고 있는 블로그입니다.

Web/PHP

PHP에서 배열을 문자열로 합치기, 문자열을 배열로 만들기 | explode, implode

웹아이 2021. 9. 7. 22:16

안녕하세요~

이번 시간에는 PHP의 explode와 implode에 대해서 알아보겠습니다.

 

간단하게 설명을 드리자면,

explode는 문자열을 특정 문자로 분리해서 배열로 만들어 줍니다.

implode는 배열을 특정 문자로 합쳐서 문자열로 만들어 줍니다.

 

이게 도대체 무슨 말?ㅎㅎ

사실 프로그램 공부하면서 제일 어려운 건 이해가 쉽지 않은 것도 있지만 이걸 왜! 어디에! 써야 하는지를 모르겠다는 게 제일 힘든 거 아닐까요?

물론 저도 처음에 공부할때 그런 어려움이 있었어요ㅠ

 

자! 일단 어떻게 사용하는지에 대해서 알아볼게요

 

string implode ( string $glue , array $pieces )

 

implode를 먼저 알아볼게요.. 사용법은 위와 같습니다.

 

<?php
    $a1 = array("1","2","3");
    $a2 = array("a");
    $a3 = array();
    
    echo "a1 is: ".implode(",",$a1)."<br>";
    echo "a2 is: ".implode(",",$a2)."<br>";
    echo "a3 is: ".implode(",",$a3)."<br>";
?>

// 결과
a1 is: 1,2,3
a2 is: a
a3 is:

 

implode는 배열을 사이사이에 특정 문자를 삽입하면서 하나의 문자열로 만들어 주는 기능이에요.

 

첫 번째 값을 보면 배열에 3개의 값이 있고 , (쉼표)로 합치라고 되어있습니다.

그래서 결과는 1,2,3 이 되는군요.

 

두 번째는 배열 값이 하나라서 그냥 a라고만 출력이 되는 거고요

 

세 번째는 배열 값이 없어서 아무것도 합칠 수가 없어서 빈 값이 출력되었습니다.

 

implode 끝!!! 쉽죠?ㅎㅎㅎ

아참... 앞에 $glue 값은 생략해도 된답니다.

첫 번째 예제를 implode($a1)이라고 바꾸면 출력은 123이라고 돼요.^^

 

음.. 근데 이걸 어디에 쓰죠??

 

체크박스 여러 개일 때 name=test [] 요렇게 name을 지정하고 submit 하면 배열로 넘어가잖아요?

그때 배열은 디비에 저장할 수 없으니 implode를 사용해서 문자열로 저장을 한다거나,

mysql에서 SELECT 할 때 WHERE절에 IN 문을 사용할 때 사용하기도 합니다.

$search = implode(", ", $arr);

검색할 데이터를 배열로 만들어준 다음에 SELECT * FROM table WHERE field IN ($search) 요런 식으로 사용해준답니다.

 

자 다음으로는 explode를 알아볼게요~

 

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

 

explode는 implode의 반대로 잘라주는 거예요. 사용법은 위와 같습니다.

 

<?php
$input1 = "hello";
$input2 = "hello,there";
$input3 = ',';
var_dump( explode( ',', $input1 ) );
var_dump( explode( ',', $input2 ) );
var_dump( explode( ',', $input3 ) );
?>
// 결과
array(1)
(
    [0] => string(5) "hello"
)
array(2)
(
    [0] => string(5) "hello"
    [1] => string(5) "there"
)
array(2)
(
    [0] => string(0) ""
    [1] => string(0) ""
)

 

예제를 보니 감이 오시나요?

쭉 나열된 문자열을 특정한 문자로 잘라서 배열에 넣어주는 거고요

explode(자를 기준이 되는 문자 , 문자열) 요렇게 써주시면 됩니다.

 

첫 번째 $input1을 볼까요? , (쉼표)를 기준으로 자르라고 했는데 쉼표가 없죠?

그럴 때는 그냥 값 전체가 0번 배열로 들어가게 됩니다.

 

두 번째 $input2는 hello, there 문자열이네요. 쉼표를 기준으로 자르게 되면

$input2[0]에 hello $input2[1]에 there이 들어가게 됩니다.

 

세 번째 $inpu3은 쉼표만 있네요;;; 이럴 때는 일단 쉼표를 기준으로 자르지만 값이 없기 때문에

$input3[0], $input[1]에 모두 빈 값이 들어가게 되는 거예요.

 

이해가 조금 되셨나요?ㅎㅎ

여기서 중요한 게 explode는 implode처럼 첫 번째 값을 생략할 수 없습니다. 잊지 마세요!!

 

그럼 여기서 조금 더 심화과정!! explode의 3번째 항목 limit입니다.

 

<?php
$str = 'one|two|three|four';

// positive limit
print_r(explode('|', $str, 2));

// negative limit (since PHP 5.1)
print_r(explode('|', $str, -1));
?>

// 결과
Array
(
    [0] => one
    [1] => two|three|four
)
Array
(
    [0] => one
    [1] => two
    [2] => three
)

 

3번째 항목에 숫자가 추가되었죠? 3번째 항목은 필요할 때만 사용하면 되는 항목이고요

만들어주는 배열의 개수를 제한해주는 거예요

첫 번째 2라고 써진 곳을 보면 원래대로라면 배열이 4개의 값이 들어가야 하는데 2개로만 만들어졌어요.

그리고 두 번째에는 마지막 하나가 없어졌네요.

 

예제처럼 양의 수로 쓰면 만들어줄 배열의 개수를 제한해주면서 마지막 배열 값에는 남은 모든 문자열을 넣어주는 거고요

음의 수로 쓰게 되면 뒤에서 부서 숫자만큼 배열을 제거해주면서 제한을 줄 수 있습니다.

 

점점 복잡해지는 거 같지만... 사실 저는 limit 기능은 써본 적이 없는 거 같네요;;ㅎㅎㅎ

 

그럼 explode는 어디에 쓸까요?

 

아까 implode를 사용해서 디비에 저장한 데이터를 다시 배열로 만들어서 in_array를 사용해서 체크박스에 체크 처리를 해준다거나, 태그 기능 같은 거 만들 때 , (쉼표)로 구분하게 해 놓고 입력한 값을 explode 쉼표로 해서 단어를 각각 디비에 저장을 해줄 수 있습니다.

배열을 많이 사용하시면 explode, implode도 많이 사용하시게 될 거예요~

 

계속 소식을 받고 싶다면 구독을!! 궁금한 게 있으시다면 댓글로 남겨주세요!!^^

반응형