2014-01-16 168 views
1

我试图加载中文单词作为键,并将它们的英文翻译作为数据库中的值加载到PHP数组中,然后我可以使用它们JavaScript中的客户端。因此,我将PHP key:value对加载到JavaScript数组中,并尝试输出结果。将数据库值加载到PHP中,然后加载到JavaScript数组中

数据库设置:

enter image description here

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转储显示关键的合适配对(中国的词)来衡量(英文单词),为什么我得到这个不同的输出?

回答

1

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()功能没有按” t移动数组指针,因此您可以重复使用相同的数组键。

+0

哈,奇怪的是key()不会随数组一起移动。所以要移动这个键,你可以使用data_seek,对吧?另外,你可以解释'json_encode'吗? – Growler

+0

我认为你想要做的是回声添加到数组中的最后一个元素。我会这样做:'$ v = end($ array);回显键($ array)。 “:”。 $ V;'。 'end'将确保指针位于最后一个元素上。我已经更新了答案以进一步解释'json_encode'。这是否涵盖你所需要的? – anthonygore

0

也许你可以试试这个吗?

var words = 
[<?php $result = []; 
foreach($wordsArray as $key=>$value){ 
    $result[] = '"'.$key.'":"'.$value.'"'; 
} 
echo implode(',', $result) 
?>] 
相关问题