채택완료

1~12까지 루프돌면서 저장된 값을 비교하여 체크하기

2018-04-10 (화) 10:38:41 1,896

안녕하세요

도움 좀 얻고자 합니다.

3028488269_1523324253.5704.jpg

이미지처럼 저장된 값만 체크되로록 하려며 어떻게 해야 할까요?

Copy
$month_arr = array("january", "february", "march", "april", "may", "june", "july", "august", "september", "october", "november", "december");   

$wr_1 = explode("|", $write["wr_1"]);     

for($i=0; $i<=11; $i++) {       

$num++;      

  foreach($month_arr as  $v) {

      in_array($v, $wr_1) ? $chk = "checked" : $chk = "";

    }

    echo "<input type='checkbox' name='wr_1_".$num."' value='".$v."' ".$chk."/> ".$num."월";

}
|

답변 2개 / 댓글 2개

채택된 답변
+20 포인트

foreach($month_arr as  $v) {       

   in_array($v, $wr_1) ? $chk = "checked" : $chk = "";     

}

이 부분 굳이 배열에서 비교하지 않아도 됩니다.

if( strpos($wr_1, $month_arr['$i']) !== false ) $chk = "checked"

else $chk = "";

그런데 왜 월을 영문으로 저장하시는지??

DB는 용량 최소화를 위해서 숫자로 저장하시고 

불러올때 영문으로 변경하는게 좋습니다.

그리고 $num = $i+1;  하면 되겠네요..^^

답변에 대한 댓글 1개

답변 주셔서 정말 감사합니다.
2018-04-10 (화) 12:47:26

echo  문을 foreach 문 안에서 쓰면 됩니다.

Copy
foreach($month_arr as  $v) {
   in_array($v, $wr_1) ? $chk = "checked" : $chk = "";  
  echo "<input type='checkbox' name='wr_1_".$num."' value='".$v."' ".$chk."/> ".$num."월";
}

어떤 처리를 하는 방법은 여러가지가 있습니다.

in_array() 로 처리를 할 수도, strpos 을 쓰는 것도, 그 외의 방법도 있을 수 있습니다.

지금의 상황에서는 in_array() 사용방식이 코드의 가독성 측면에서는 더 낫다고 볼 수도 있습니다.

물론, 다른 시각도 가능합니다.

하드웨어적인 발전이 많이 이루어져,

DB 데이터 타입/저장방식을 고민할 때 varchar 형을 int 형으로 바꾸는게

체감할 수 있는 정도의 향상이 있지는 않습니다.

최근에는 용량의 측면이 크게 중요한 고려대상은 아닙니다.

이 또한 가독성 또는 개발자의 취향에 따라 선택하여도 크게 무리가 되지는 않는다고 생각됩니다.

답변에 대한 댓글 1개

조언주셔서 대단히 감사합니다 많은 도움이 되었습니다.

답변을 작성하려면 로그인이 필요합니다.