2026, 새로운 도약을 시작합니다.

코딩줄이기 - 배열로 라디오/체크박스 출력하기

· 9년 전 · 10193 · 12
쓰기페이지_라디오.PNG
쓰기페이지_체크박스.PNG
뷰페이지.PNG
사용예

1. 배열 셋팅
<?php
$매물형태 = array('전세', '임대', '사글세/년세', '매매');
$옵션1 = array();
$옵션1[] = '에어컨';
$옵션1[] = '냉장고';
$옵션1[] = '세탁기';
$옵션1[] = '가스레인지';
$옵션1[] = '인덕션';
$옵션1[] = '전자레인지';
?>


2. write.skin.php 코딩

<tr>
<th scope="row">매물형태</th>
<td>
<?php
echo array_to_input($매물형태, 'radioValue', 'wr_7', '', $write['wr_7']);
?>
</td>
</tr>
<tr>
<th scope="row">옵션</th>
<td>
<?php
echo array_to_input($옵션1, 'checkValue', 'wr_10', '', $write['wr_10']);
?>
</td>
</tr>

※ 체크박스의 value값을 배열의 value값으로 설정 할 때 'checkValue'
※ 체크박스의 value값을 배열의 key값으로 설정 할 때 'checkKey'


3. write_update.head.skin.php 설정
<?php
@sort($wr_10);
$wr_10 = implode('|',$wr_10);
?>


4. view.skin.php 코딩
<tr>
<th>옵션</th>
<td colspan="3"><?=str_replace('|', ', ', $view['wr_10'])?></td>
</tr>



배열의 키값을 value로 사용하느냐, 배열의 값을 value로 사용하느냐는 옵션으로 조정가능하게 처리하고
귀차니즘을 줄이기 위해 만든 함수입니다.
최대 장점중 하나는 글쓰기 수정시 체크해주는 부분을 신경 안써도 된다고나 할까요.
셀렉트의 옵션도 해당 함수로 처리가능합니다.
각 생성되는 체크박스나 라디오에 id값은 자동으로 부여됩니다. class는 선택 입력가능하구요.
(js로 추가 처리 가능하게 해둔 부분입니다)


[함수]
function array_to_input($in_array, $type = 'selectKey', $input_name = '', $class_name = '', $in_value = null) {
if(!is_array($in_array)) return false;
$result = array();
$tmp_se = array();

if(isset($in_value)) {
if(strpos($type, 'select') === false) {
$check_text = ' checked';
} else {
$check_text = ' selected';
}
if(!is_array($in_value)) $in_value = array($in_value);
foreach($in_value as $value) {
if(strpos($type, 'Value') === false) {
$tmp_se[$value] = $check_text;
} else {
$tmp = array_search($value, $in_array);
if($tmp !== false) $tmp_se[$tmp] = $check_text;
}
}
}
if($type == 'selectKey') {
foreach($in_array as $key => $value) {
$result[] = '<option value="'.$key.'"'.$tmp_se[$key].'>'.$value.'</option>';
}
return implode("\n", $result);
}

if($type == 'selectValue') {
foreach($in_array as $key => $value) {
$result[] = '<option value="'.$value.'"'.$tmp_se[$key].'>'.$value.'</option>';
}
return implode("\n", $result);
}

if($type == 'radioKey') {
foreach($in_array as $key => $value) {
$result[] = '<input type="radio" name="'.$input_name.'" value="'.$key.'" class="'.$class_name.'" id="'.$input_name.$key.'"'.$tmp_se[$key].'> <label for="'.$input_name.$key.'">'.$value.'</label>&nbsp;';
}
return implode("\n", $result);
}

if($type == 'radioValue') {
foreach($in_array as $key => $value) {
$result[] = '<input type="radio" name="'.$input_name.'" value="'.$value.'" class="'.$class_name.'" id="'.$input_name.$key.'"'.$tmp_se[$key].'> <label for="'.$input_name.$key.'">'.$value.'</label>&nbsp;';
}
return implode("\n", $result);
}

if($type == 'checkKey') {
foreach($in_array as $key => $value) {
$result[] = '<input type="checkbox" name="'.$input_name.'[]" value="'.$key.'" class="'.$class_name.'" id="'.$input_name.$key.'"'.$tmp_se[$key].'> <label for="'.$input_name.$key.'">'.$value.'</label>&nbsp;';
}
return implode("\n", $result);
}

if($type == 'checkValue') {
foreach($in_array as $key => $value) {
$result[] = '<input type="checkbox" name="'.$input_name.'[]" value="'.$value.'" class="'.$class_name.'" id="'.$input_name.$key.'"'.$tmp_se[$key].'> <label for="'.$input_name.$key.'">'.$value.'</label>&nbsp;';
}
return implode("\n", $result);
}

return false;
}

첨부파일

뷰페이지.PNG (1.1 KB)
15회 2016-03-18 11:59
array_to_input.lib.php (2.3 KB) 107회 2016-03-18 12:00
|

댓글 12개

제가 찾던 기능이었는데 ( 몇 개월간 고심하던것인데 한방에 해결되는것 같아서 너무 감사한 마음이 많이 듭니다~
그누보드4에서 사용했던것을 어떻게 수정해서 적용하나 고심했는데... 감사감사합니다
잘~ 사용해보겠습니다~

그림자밟기님과 고수님들께 한가지 문의드립니다
예를들어 wr_1 한곳에
체크박스, 라디오 도 사용하면서
셀렉트 선택하는것도 같이 사용하려면 어떻게 적용하면 되나요?
왕초보여서 송구한 마음으로 여쭈어봅니다


추천도장찍고, 댓글 남깁니다..
그림자밟기님 감사합니다^^*
통상 위와 같은 경우에는 name을 다르게 하고, 후작업으로 wr_1에 저장하는 방식을 택합니다.

write.skin.php
<select name="wr_1_1"></select>
<input type="checkbox" name="wr_1_2[]" value="체크박스">
<input type="checkbox" name="wr_1_2[]" value="체크박스">
<input type="radio" name="wr_1_3" value="라디오">
<input type="radio" name="wr_1_3" value="라디오">

write_update.head.skin.php
<?php
$wr_1_2 = implode('|',$wr_1_2); // 체크박스는 배열로 넘어오기 때문에 먼저 작업
$wr_1 = $wr_1_1.'^|^'.$wr_1_2.'^:^'.$wr_1_3;
?>

view.skin.php
<?php
list($view[wr_1_1], $view[wr_1_2], $view[wr_1_3]) = explode('^:^', $view[wr_1]);
?>

write.skin.php 수정을 위해
<?php
if($w == 'u') {
list($write[wr_1_1], $write[wr_1_2], $write[wr_1_3]) = explode('^:^', $write[wr_1]);
}
?>
그림자밟기 님 친절하게 설명과 가르쳐주심에
너무 감사를 드립니다~

시간이 가도~ 아직 걸음을 때는 단계에 있는 한사람으로 더~ 분발하도록 하겠습니다~

말씀하신대로~ 한번 잘~ 적용해보겠습니다~
감사합니다~ 꾸벅~

( 아침저녁으로 쌀쌀한데 감기조심하시고~ 한주간도 화이팅입니다 그림자밟기님^^*
& 그누보드 식구들도~ 화이팅여~ )
좋은 팁 감사합니다.
이렇게 배열로 해서 빈값 없이 넘기는 jquery는 어떻해야 할까요??
필수입력 체크 말씀이시죠?

wr_1로 예를 들겠습니다.
(체크박스와 라디오는 동일합니다.)

아래 방식으로 하기 위해서는 위 함수로 입력시 class명까지 지정해줘야 합니다.

<?php
echo array_to_input($매물형태, 'radioValue', 'wr_1', 'wr_1', $write['wr_1']);
?>

write.skin.php 하단부

function fwrite_submit(f)
{

요쪽 함수에 아래 처럼 체크하면 되겠습니다.

var check_value = $(".wr_1:checked");
var check_length = check_value.length;
if(!check_length) {
alert("항목을 선택해 주십시오");
f.wr_1.focus();
return false;
}
초보라서 무슨말인지 하나도 모르겠습니다.......ㅠ.ㅠ
혹시 적용하신 스킨있으심...예제하나주심 안될까요?
너무 좋은 팁이군요,,적용해보겠습니다. 감사합니다.
좋은정보 감사합니다^^

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

그누보드5 팁자료실

번호 제목 글쓴이 날짜 조회
공지 3년 전 조회 4,598
2741 3일 전 조회 112
2740 4일 전 조회 104
2739 1주 전 조회 209
2738 1주 전 조회 217
2737 1주 전 조회 181
2736 1주 전 조회 280
2735 3주 전 조회 281
2734 3주 전 조회 263
2733 1개월 전 조회 265
2732 1개월 전 조회 301
2731 1개월 전 조회 267
2730 1개월 전 조회 226
2729 1개월 전 조회 356
2728 1개월 전 조회 245
2727 1개월 전 조회 422
2726 1개월 전 조회 256
2725 1개월 전 조회 331
2724 1개월 전 조회 360
2723 1개월 전 조회 267
2722 1개월 전 조회 300
2721 1개월 전 조회 211
2720 2개월 전 조회 304
2719 2개월 전 조회 307
2718 2개월 전 조회 202
2717 2개월 전 조회 336
2716 2개월 전 조회 202
2715 2개월 전 조회 312
2714 2개월 전 조회 273
2713 2개월 전 조회 376
2712 2개월 전 조회 289
🐛 버그신고