데이터가 A[1]/B[2]/C[3] 인 경우 <div id="A"></div>에 1이 들어가게 하고싶습니다.
본문
일전에 데이터 값이 `1월/2월/3월`인 경우 1월, 2월, 3월에 해당하는 체크박스에 체크를 하는 작업에 대해 질문을 드렸었고, 그 답변으로
$wr_9_arr = explode('/', $write['wr_9']);
<?php echo (in_array('1월',$wr_9_arr)) ? " checked" : "";?>
라는 답변을 받아 적용한 적이 있습니다.
이 기능에 변경이 필요하게 되었습니다.
게시글 작성 디자인이 체크박스에서 텍스트작성으로 변경되어 위의 이미지와 같은 모습이 되었습니다.
위의 1월, 3월, 5월에 각각 15 ,17, 13 이라는 값을 입력하고 저장을 누르면 wr_9의 데이터는
`1월[15]/3월[17]/5월[13]`
이라는 식으로 데이터가 들어가도록 작성은 되었습니다.
이제 view 페이지, 게시글 수정 페이지에 들어갔을 때,
wr_9의 값에 1월 이라는 텍스트가 있다면 그 뒤의 [] 안에 있는 값을 input에 넣고싶습니다.
위의 $wr_9_arr = explode('/', $write['wr_9']); 를 응용해야할 것같은데, wr_9_arr은 /로 split 한 값이니
wr_9_arr 의 첫번째 값이 1월[15],
wr_9_arr 의 두번째 값이 3월[17],
wr_9_arr 의 세번째 값이 5월[13] 이 될 것인데,
js라면, 좀 무식하게 작성한다고 할 때
if(wr_9_arr[0].search !== -1) {
wr_9_arr[0].split("[")[1].split("]")[0];
}
이런식으로 작성하여 15라는 값을 넣는다던가 할텐데, 다른 방법은 없을까요?
현재는 js로 기능을 작성하여
<script> $(function() { const wr_9 = $("input[name=wr_9]").data("wr"); if(wr_9 != "") { let split = wr_9.split("/"); for(let v=0; v<split.length; v++) { const value = split[v]; const valueSplit = value.split("["); const month = valueSplit[0]; const monthVal = valueSplit[1].split("]")[0]; const input = $(`[data-month=${month}]`); input.val(monthVal); } } }) </script>
이렇게 작성하였습니다. 기능은 정상 작동중입니다.
답변 1
<?php
$write['wr_9'] = "1월[15]/3월[17]/5월[13]";
$wr_9_arr = explode('/', $write['wr_9']);
$ret = array();
foreach ($wr_9_arr as $value) {
preg_match_all("/\[([^)]+)\]/i", $value, $matches);
$value = preg_replace('/\[[^\]]*\]/','',$value);
$ret[$value] = $matches[1][0];
}
?>
<div id="1월"><?=$ret['1월']?></div>