繁体   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