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

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

QA

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

본문

안녕하세요

 

도움 좀 얻고자 합니다.

 

3028488269_1523324253.5704.jpg

 

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

 


$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 형으로 바꾸는게

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

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

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

답변을 작성하시기 전에 로그인 해주세요.
전체 6
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT