簡體   English   中英

將k:v對的數據庫值加載到PHP中,然后加載到JavaScript數組中

[英]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.

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