개발/php

[php] explode 배열 값 있는 것만 콤마로 구분해서 보여주기

반응형

 

체크박스를 통해서 값을 받고 | 를 구분자로 배열로 저장하는 작업을 했다.

값을 저장하는 것 까지는 문제가 없는데, 값이 있는 경우만 불러오고 콤마로 깔끔하게 보여주는 방법을 고민해보았다.

 

 

예를 들어 아래와 같이 체크박스를 통해서 값을 받았다고하자.

 

좋아하는 과일을 선택하세요(중복선택가능)

□사과 포도 복숭아 망고

 

<input type="checkbox" name="fruit1" value="사과"> 사과
<input type="checkbox" name="fruit2" value="배"> 배
<input type="checkbox" name="fruit3" value="포도"> 포도
<input type="checkbox" name="fruit4" value="복숭아"> 복숭아
<input type="checkbox" name="fruit5" value="망고"> 망고 

 

| 로 구분해 값을 각각 저장하는 경우에

$fruit = "$fruit1|$fruit2|$fruit3|$fruit4|$fruit5" 와 같은 형식으로 값을 저장하게 될 것이다.

 

 

좋아하는 과일을 선택하세요.(중복선택가능)

▣사과  □배  □포도 ▣ 복숭아 □망고

 

 

예를들어 사과와 복숭아만 선택한 경우, $fruit 의 저장된 값은 사과|||복숭아||

중간에 값이 없는 곳은 ||| 만 잔뜩 들어가게 된다.

 

 

이 배열에서 특정 몇번째에 있는 값을 불러올 때는 어렵지 않게 불러올수 있지만

저장된 배열 값을 그대로 순서대로 다시 보여줘야만 하는 경우에는 여러개 겹쳐있는 || 이 구분자들을 없애줘야한다.

 

 

1) $fruit 값의 맨 앞, 맨 뒤에 있는 |를 제거해준다.

$str = rtrim($str,'|'); 
$str = ltrim($str,'|'); 

 

2) 구분자( | ) 이 여러개 들어가 있는 것들을 제거하고 |로 변환한다. 입력받는 체크박스 갯수에 따라서 더 길어질 수도 있다. (약간의 노가다..)

$str = str_replace('||','|',str_replace('|||','',str_replace('||||','',$str))); 

 

3) 원래의 배열 갯수를 구한다.

$str2 = explode('|' , $str);

$cnt = count($str2);

 

4) for 문을 통해 배열한다. 배열 뒤에는 콤마(,)로 구문하고 마지막 배열 값은 콤마 없이 마무리한다.

 

for ($i=0; $i<$cnt; $i++) {
  if($i < $cnt - 1) {   //마지막이 아닌것은 콤마를 찍어줌
  echo trim($str2[$i]). ", ";
  } else {
  echo trim($str2[$i]); //마지막 값은 콤마를 찍지 않음
  }
}

 

 

전체 코드

$str = $fruit;
$str = rtrim($str,'|'); //문자열 맨 앞 | 제거
$str = ltrim($str,'|'); //문자열 맨 뒤 | 제거
$str = str_replace('||','',str_replace('|||','',str_replace('||||','',str_replace('|||||','',$str))));  // 중복되는 | 제거
$str2 = explode('|' , $str);
$cnt = count($str2);

for ($i=0; $i<$cnt; $i++) {
  if($i < $cnt - 1) {
  echo trim($str2[$i]). ", ";  //마지막이 아닌것은 콤마를 찍어줌
  } else {
  echo trim($str2[$i]);  //마지막 값은 콤마를 찍지 않음
  }
}

 

위와 같이 하면 결과값은!!

사과, 복숭아

 

 

 

 

 

반응형