簡體   English   中英

從PHP中回顯的json編碼數組迭代javascript對象

[英]Iterate javascript object from echoed json encoded array from PHP

我正在嘗試從Javascript中的PHP數組獲取值並填充圖表。

問題是我認為javascript變量未接收到值。

我嘗試打印出這些值,但是什么也沒有發生。 它也顯示為對象而不是數組,我不知道是否應該是那樣。

任何幫助將是巨大的。

打印出來的PHP數組:

print_r("<pre>"); 
print_r($exam_grades);
print_r("</pre>");

Array
(
    [History] => 70
    [Sociology] => 40
    [Psychology] => 32
    [Criminology] => 64
)

JS:

var exam_grades = <?php echo json_encode($exam_grades );?>;
alert(exam_grades.length); // this shows as undefined
for (var i = 0; i < exam_grades.length; i++) {

    // do something      
}

您的問題是JS數組沒有關聯索引,因此您的PHP數組變成了JS對象。 您可以嘗試像這樣重寫您的PHP數組:

$grades = [
    ['exam' => 'History', 'grade' => 70],
    ['exam' => 'Sociology', 'grade'  => 40],
    ['exam' => 'Psychology', 'grade'  => 32],
    ['exam' => 'Criminology', 'grade'  => 64]
];

然后,您可以在json_encode之后在JS上進行迭代。

或者,您也可以使用for in來遍歷對象:

<?php $exam_grades = array('History' => 70, 'Sociology' => 40, 'Psychology' => 32, 'Criminology' => 64); ?>
<script type="text/javascript">
var exam_grades = <?php echo json_encode($exam_grades); ?>;
for(var key in exam_grades) {
    var value = exam_grades[key];
    console.log(key + ': ' + value);
}
</script>

樣本輸出

該變量是一個對象(因為PHP中的數組具有字符串鍵),您可以使用Object.keys()進行迭代:

Object.keys(exam_grades).forEach(function(key) {
    console.log(key + ': ' + exam_grades[key]);
});

請注意,JavaScript中的對象屬性不是按定義排序的,因此,如果這一點很重要,則應考慮在PHP中創建一個數字索引數組。

一個php關聯數組將json編碼為一個javascript對象,因為javascript沒有像php那樣具有真正的關聯數組。 length未定義,因為javascript對象沒有本地長度屬性。 要遍歷對象,您可以執行以下操作:

for (var key in exam_grades) 
{ if (exam_grades.hasOwnProperty(key)) { 
    console.log(key + " -> " + exam_grades[key]);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM