1~12까지 루프돌면서 저장된 값을 비교하여 체크하기
본문
안녕하세요
도움 좀 얻고자 합니다.
이미지처럼 저장된 값만 체크되로록 하려며 어떻게 해야 할까요?
$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
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; 하면 되겠네요..^^
echo 문을 foreach 문 안에서 쓰면 됩니다.
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 형으로 바꾸는게
체감할 수 있는 정도의 향상이 있지는 않습니다.
최근에는 용량의 측면이 크게 중요한 고려대상은 아닙니다.
이 또한 가독성 또는 개발자의 취향에 따라 선택하여도 크게 무리가 되지는 않는다고 생각됩니다.
!-->
답변을 작성하시기 전에 로그인 해주세요.