반복문과 배열 질문드립니다.
본문
mysqli_set_charset($conn,"utf8");
$select_query = "SELECT it_name FROM g5_shop_item";
$result = mysqli_query($conn, $select_query);
$cnt = 0;
$resultArr = array();
while($r = mysqli_fetch_assoc($result)){
$resultArr[] = $r;
$cnt ++;
}
이렇게 해서 현재 DB에서 가져온상태입니다.
<script type="text/javascript">
//<![CDATA[
$(function() {
var arr = [];
for(var j=0; j<"<?php echo $cnt; ?>"; j++){
arr.push("<?php echo $resultArr["j"]['it_name']; ?>");
console.log(j);
}
console.log(arr);
var availableCity = arr;
$("#sch_str").autocomplete({
source: availableCity,
select: function(event, ui) {
console.log(ui.item);
},
focus: function(event, ui) {
return false;
//event.preventDefault();
}
});
});
//]]>
</script>
자바스크립트에서 사용하려고하는데
arr.push("<?php echo $resultArr["j"]['it_name']; ?>");
이부분 이 계속 공백으로 들어갑니다.
arr.push("<?php echo $resultArr["0"]['it_name']; ?>");
이렇게할경우
제대로 배열이생성됩니다.
arr.push("<?php echo $resultArr["+j+"]['it_name']; ?>");
이렇게도 해보았지만 되지않았습니다
그래서 j를 console.log로 찍어보았는데
잘 찍히는것까지 확인되었습니다.
왜 배열에 넣을때 공백으로 들어가는지를 모르겠습니다.
답변 1
자바스크립트의 특성인 비동기 실행때문으로 보입니다.
php에서 가져온 배열을 해당 방법으로 하기보다는
var arr = <?php echo json_encode($resultArr)?>;
형태로 선언하시고 console.log(arr)을 찍어보세요.
해당 값이 jons 오브젝트 배열 형태로 선언이 됩니다.
코드쪽이나 직관적인 면에서 해당 방법이 더 간단하고 편할거라 생각되네요.
!-->