我有一个php函数,它将从users
数据库的列中获取名称列表。我想要做的是从列name
获取所有值并将其插入到数组中。
我从php方面做的是:
header('Content-type: application/json');
include ('../Core/Initialization.php');
$courseName = $_POST['courseName'];
$semester = $_POST['semester'];
$sql = mysql_query("SELECT DISTINCT `name` FROM `users` WHERE `programme` = '$courseName' AND `semester` = '$semester'") or trigger_error(mysql_error().$sql);
$column = mysql_fetch_assoc($sql);
$arr = array();
foreach($column as $value) {
$arr[] = array('name' => $value['name']); //I have tried it this way but it didn't work when I try to display the values.
}
echo json_encode($arr);//I have tried to remove the array and just json_encode($column). I have successfully print out the first values, but fail to print out the next values collected from the column.
将处理/打印出名称的js函数:
function nameProcess(data) {
alert(data.name); //This will only display the full values from the first(?) index
nameArray = data.name;
for (var i=0; i < nameArray.length; i++) {
alert(nameArray[i]); //But, this loop only displays one character each time of the alert. Example: Each character from the word "Hello" will show up one by one as alert.
}
}
});
有没有更好的方法呢?我想要做的是,将列name
中的所有值导出到一个数组中,并将其每个值作为选择框的选项进行迭代。但就目前而言,我该如何解决这个问题呢?
答案 0 :(得分:0)
首先,不要使用mysql_ *函数,因为它们已被弃用 完全删除了PHP 7。
回到你的问题,你只能用循环来获取带有MySQL的mysql多维数组。
更正后的代码:
$sql = mysql_query("SELECT DISTINCT `name` FROM `users` WHERE `programme` = '$courseName' AND `semester` = '$semester'") or trigger_error(mysql_error().$sql);
$res = mysql_query($sql); // Missing this.
$column = ;
$arr = array();
while ($value = mysql_fetch_assoc($res)) {
$arr[] = $value['name'];
}
echo json_encode($arr);
答案 1 :(得分:0)
注意:不推荐使用您正在使用的PHP MySQL命令。建议使用PDO类(因为MySQLi也已弃用)。
这取决于您正在执行的预处理,但根据您提供的信息我可以看到,您将返回数据的每个元素传递到nameProcess
。
所以
的返回数据array(
array('name' => 'John Smith',
array('name' => 'Jane Doe',
array('name' => 'Foo Bar'
);
需要调用nameProcess
函数3次。
所以每次你去定义
nameArray = data.name;
nameArray
成为字符串,因为data.name是第一次调用的'John Smith','Jane Doe'是第二次调用,'Foo Bar'是最后一次调用。
所以当你打电话
alert(nameArray[i]);
它正在调用字符串中位置i的字符。
nameArray[0]; // 'J'
nameArray[1]; // 'o'
nameArray[2]; // 'h'
nameArray[3]; // 'n'
// etc
如果您将其更改为:
function nameProcess(data) {
alert(data.name);
nameArray = data.name;
alert(nameArray);
}
它会提醒全名。
解决这个问题的方法是确保在没有预处理的情况下将JSON解析数据传递给函数,在这种情况下,如果您将原始代码更改为:
function nameProcess(data) {
alert(data.name);
nameArray = data.name;
for (var i=0; i < nameArray.length; i++) {
alert(nameArray[i].name);
}
}