'JSON to Javascript Array'에 해당되는 글 1건

728x90

Array 변수 처리에 대한 이해가 부족하여 기능 구현보다 변환하는데 시간이 휠씬 더 걸리고 있다.

다 기초가 부족한 탓이다. 테스트한 결과를 무조건 기록해둔다.


PHP 함수에서 return json_encode($R); 배열로 반환 결과가

{"1":"36","2":"23","3":"14","4":"7","5":"12","6":"6","7":"5","8":"9","9":"17","10":"7"}

일 경우


자바스크립트에서 배열 변수로 받기 위해서는

var obj1 = JSON.parse('<?php echo $line1; ?>');

var line1 = new Array();

for(var i in obj1){

    line1.push(obj1[i]);

}

로 하면 값만 추출된 배열변수가 만들어진다.

또다른 방법으로 테스트를 했다.

var obj1 = <?php echo $line1; ?>;

var line1 = $.map(obj1, function(el) { return el });

로 해도 동일한 결과가 나온다.



배열 변환 결과가

[0,1,2,3,4,5,6,7,8,9,10]

로 화면 출력될 경우에는

var ticks = JSON.parse('<?php echo json_encode($ticks); ?>');

또는

var ticks = <?php echo '["' . implode('","', $ticks) . '"]' ?>;

둘 중에 하나를 사용하면 배열 변수가 된다.


PHP 배열로 반환된 결과를

<?php

$Line2 = array();
foreach($line2 as $key => $value){
    array_push($Line2,$value);
}

?>

로 값만 다시 배열로 만든다음에

var line2 = <?php echo '["' . implode('","', $Line2) . '"]' ?>;

로 자바스크립트 배열 변수를 만들 수 있다.


테스트한 파일을 그대로 적어둔다.

<?php
require_once 'connect.php'; // db접속 성공
require_once 'statsClass.php'; // 통계 클래스
$b = new statsClass();
$R = $b->extract_YM();
date_default_timezone_set('Asia/Seoul');
if(isset($_GET['ym'])){
    $ym = $_GET['ym'];
} else {
    $ym = date("Ym");
}
$ticks = $b->maxdate_YM($ym);
$line1 = $b->dailyCnt_value($ym);
$line2 = $b->userCnt_value($ym);
//echo $line1.'<br />';
//echo json_encode($line2).'<br />';
//echo json_encode($ticks).'<br />';
$Line2 = array();
foreach($line2 as $key => $value){
    array_push($Line2,$value);
}
?>
<!DOCTYPE html>
<head>
<meta charset="UTF-8" />
<meta name="robots" content="noindex,nofollow"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no"/>
<meta http-equiv="X-UA Compatible" />
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<!-- http://www.jqplot.com 제공 자바스크립트 include -->
<script type="text/javascript" src="../js/jqplot/jquery.jqplot.js"></script>
<script type="text/javascript" src="../js/jqplot/plugins/jqplot.barRenderer.js"></script>
<script type="text/javascript" src="../js/jqplot/plugins/jqplot.pointLabels.js"></script>
<script type="text/javascript" src="../js/plugins/jqplot.categoryAxisRenderer.js"></script>
<link rel="stylesheet" type="text/css" href="../js/jqplot/jquery.jqplot.css" />
<script type="text/javascript">
$(document).ready(function(){
    var plot1;
    /*
    var obj1 = JSON.parse('<?php echo $line1; ?>');
    var line1 = new Array();
    for(var i in obj1){
        line1.push(obj1[i]);
    }
    */
    var obj1 = <?php echo $line1; ?>;
    var line1 = $.map(obj1, function(el) { return el });

    //var obj2 = JSON.parse('<?php echo json_encode($line2); ?>');
    /*
    var line2 = new Array();
    for(var i in obj2){
        line2.push(obj2[i]);
    }
    */
    var line2 = <?php echo '["' . implode('","', $Line2) . '"]' ?>;

    //var ticks = JSON.parse('<?php echo json_encode($ticks); ?>');
    var ticks = <?php echo '["' . implode('","', $ticks) . '"]' ?>;

    renderChart(line1,line2,ticks);

    $('#selectmonth').on('change',function(){
        if(this.value !== ""){
            var optVal=$(this).find(":selected").val();
            var pageURL = "<?php echo $_SERVER['PHP_SELF'];?>?ym=" + optVal;
            $(location).attr('href', pageURL);
        }
    });

});


function renderChart(line1,line2,xAxis){
    plot1 = $.jqplot('chartDiv', [line1,line2], CreateBarChartOptions(xAxis));
}

function updatePlot(line1,line2,xAxis){
    plot1.destroy();
    plot1 = $.jqplot('chartDiv', [line1,line2], CreateBarChartOptions(xAxis));
}

function CreateBarChartOptions(xAxis) {
    var optionsObj = {
        title: '일자별 접속 통계',
        seriesDefaults:{
            renderer:$.jqplot.BarRenderer, // 막대 그래프
            rendererOptions: { barWidth: 10 }, // bar의 너비 수동으로 설정
            pointLabels: { show: true } // 레이블 값
        },
        axes: {
            xaxis: {
                renderer: $.jqplot.CategoryAxisRenderer,
                ticks: xAxis,
                tickOptions: {
                    formatString: '%d' // 정수형으로 표시
                }
                //label:'일자'
            },
            yaxis:{
                //renderer:$.jqplot.DateAxisRenderer,
                min:0,
                //max:80
            }
        },
        highlighter: { show: false }
    };
    return optionsObj;
}
</script>

</head>
<body>
<div id="chartDiv" style="height:400px;width:1500px; "></div>
<div style="height:300px;width:1490px;margin-top:10px;text-align:right;">
<select name="month" id="selectmonth">
<option value="">년월 선택</option>
<?php
    while ($row = mysql_fetch_array($R)){
        echo "<option value='".$row[0]."' ";
        if($row[0] === $ym) echo "selected='selected'";
        echo ">".$row[0]."</option>\n";
    }
?>
</select>
</div>
</body>
</html>


블로그 이미지

Link2Me

,