![](/img/trans.png)
[英]Javascript: sort Array of objects by external map (or external K.V pairs)
[英]Load database values as k:v pairs into PHP, and then into JavaScript array
我正在嘗試將中文單詞作為鍵,並將它們的英文翻譯作為值從數據庫加載到php數組中,以便隨后可以在JavaScript的客戶端上使用它們。 因此,我將PHP key:value對加載到JavaScript數組中,並嘗試輸出結果。
數據庫設置:
include 'php/DbConnect.php';
$sql = $mysqli->query(
"SELECT t.*, v.*
FROM task t
INNER JOIN vocabtask vt ON (t.id = vt.taskid)
INNER JOIN vocab v ON (v.id = vt.vocabid)
WHERE vt.taskid = 1");
$wordsArray = array();
while ($row = $sql->fetch_assoc()) {
$wordsArray[$row['chinese']] = $row['english'];
//echo key : value pair
echo "<br>".key($wordsArray) . ":" . $wordsArray[$row['chinese']];
}
var_dump($wordsArray);
mysqli_close($mysqli);
回聲輸出將Ni
作為每個值的鍵,這是錯誤的:
Ni: You
Ni: Him or Her
Ni: I
但是,var_dump提供了正確的key:value
配對:
array (size=3)
'Ni' => string 'You' (length=3)
'Ta' => string 'Him or Her' (length=10)
'Wo' => string 'I' (length=1)
JavaScript的:
var words = [<?php echo '"'.implode('","', $wordsArray).'"' ?>];
$.each(words, function(key, value) {
console.log('stuff : ' + key + ", " + value);
});
Console.log提供鍵的數字,而不是中文鍵:
stuff : 0, You
stuff : 1, Him or Her
stuff : 2, I
問題:如果php
dump顯示正確的鍵對(中文單詞)與值(英文單詞)配對,為什么我得到了不同的輸出?
implode()
沒有打印$wordsArray
的鍵,這就是為什么var words
沒有正確鍵的原因。
您真正想要實現的是使用Javascript語法的PHP數組的字符串表示形式。 可以為您完成此任務的函數是json_encode()
<?php echo "var words = ". json_encode($wordsArray) . ";";?>
此處提供更多信息: http : //au2.php.net/json_encode
這行不起作用的原因:
echo "<br>".key($wordsArray) . ":" . $wordsArray[$row['chinese']];
是因為key()
函數不會移動數組指針,因此您會重復相同的數組鍵。
也許您可以嘗試一下?
var words =
[<?php $result = [];
foreach($wordsArray as $key=>$value){
$result[] = '"'.$key.'":"'.$value.'"';
}
echo implode(',', $result)
?>]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.