我试图将中文单词作为键加载,并将它们的英文翻译为从数据库中的值加载到php数组中,这样我就可以在JavaScript的客户端使用它们。因此,我将PHP :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转储显示了将关键字(中文单词)与值(英文单词)适当的配对,为什么我要得到不同的输出?
发布于 2014-01-16 05:16:37
implode()没有打印$wordsArray的键,这就是为什么var words没有正确的键。
这里您真正想要实现的是一个带有Javascript语法的PHP数组的字符串表示。将为您执行此操作的函数是json_encode()。
<?php echo "var words = ". json_encode($wordsArray) . ";";?>更多信息在这里:encode
这句话不能用的原因是:
echo "<br>".key($wordsArray) . ":" . $wordsArray[$row['chinese']];因为key()函数没有移动数组指针,因此您将得到相同数组键的重复。
发布于 2014-01-16 05:32:57
也许你能试试这个?
var words =
[<?php $result = [];
foreach($wordsArray as $key=>$value){
$result[] = '"'.$key.'":"'.$value.'"';
}
echo implode(',', $result)
?>]https://stackoverflow.com/questions/21153520
复制相似问题