如何在PHP中创建JavaScript可以处理的多维关联数组?

如何在PHP中创建JavaScript可以处理的多维关联数组?,php,javascript,jquery,ajax,Php,Javascript,Jquery,Ajax,我正在编写一个与MySQL数据库交互的PHP脚本和一个使用AJAX调用从PHP脚本检索信息的JavaScript脚本 我想做的是创建一个框,其中我的主题是,而课程是主题中的课程 我目前拥有的是一个JS脚本,虽然Firebug中没有控制台错误,但它根本不进行处理 我编写了以下SQL语句: $sql = "SELECT s.Title AS Subject, s.Subject_ID AS Subject_ID, c.Title AS Course, c.Cour

我正在编写一个与MySQL数据库交互的PHP脚本和一个使用AJAX调用从PHP脚本检索信息的JavaScript脚本


我想做的是创建一个
框,其中我的
主题是
,而
课程是主题中的
课程

我目前拥有的是一个JS脚本,虽然Firebug中没有控制台错误,但它根本不进行处理


我编写了以下SQL语句:

$sql = "SELECT
    s.Title AS Subject,
    s.Subject_ID AS Subject_ID,
    c.Title AS Course,
    c.Course_ID AS Course_ID
    FROM
    subjects s
    LEFT JOIN courses c ON s.Subject_ID = c.Subject_ID
    WHERE s.Faculty_ID = $faculty";
如果
$faculty==1
,则返回以下数据:

然后,我使用以下代码返回多维数组,其中
主题
级别包含该主题的
课程

$res = mysql_query( $sql );
while ( $row = mysql_fetch_assoc( $res ) ) {
    $return[$row["Subject_ID"]][] = array( "Course_ID" => $row["Course_ID"], "Title" => $row["Course"] );
}

print_r( $return );
EDIT:我意识到
print\u r
无法将信息发送到我的JS脚本(我已经为此设置了一个
return$return
),我只是将其用于调试目的


完整的PHP函数如下所示:

switch($_GET["cmd"]) {
    case "populateForm" :
        $return = json_encode( populateForm() );
        break;
    case "populateCourses" :
        $return = json_encode( populateCourses( $_GET["faculty"] ) );
        break;
}

echo $return;
Array
(
    [8] => Array
        (
            [0] => Array
                (
                    [Course_ID] => 59
                    [Title] => Core ICT
                )

            [1] => Array
                (
                    [Course_ID] => 60
                    [Title] => BTEC Business
                )

            [2] => Array
                (
                    [Course_ID] => 61
                    [Title] => BTEC ICT
                )

            [3] => Array
                (
                    [Course_ID] => 62
                    [Title] => GCSE Business
                )

            [4] => Array
                (
                    [Course_ID] => 63
                    [Title] => GCSE ICT
                )

        )

    [9] => Array
        (
            [0] => Array
                (
                    [Course_ID] => 64
                    [Title] => Advance BTEC Business
                )

            [1] => Array
                (
                    [Course_ID] => 65
                    [Title] => Advance BTEC ICT
                )

            [2] => Array
                (
                    [Course_ID] => 66
                    [Title] => AS Applied Business
                )

            [3] => Array
                (
                    [Course_ID] => 67
                    [Title] => AS Applied ICT
                )

            [4] => Array
                (
                    [Course_ID] => 68
                    [Title] => A2 Applied Business
                )

            [5] => Array
                (
                    [Course_ID] => 69
                    [Title] => A2 Applied ICT
                )

            [6] => Array
                (
                    [Course_ID] => 70
                    [Title] => A2 Economics
                )

            [7] => Array
                (
                    [Course_ID] => 71
                    [Title] => A2 Law
                )

            [8] => Array
                (
                    [Course_ID] => 72
                    [Title] => GCSE Maths
                )

            [9] => Array
                (
                    [Course_ID] => 73
                    [Title] => Maths
                )

            [10] => Array
                (
                    [Course_ID] => 74
                    [Title] => AS Further Maths
                )

            [11] => Array
                (
                    [Course_ID] => 75
                    [Title] => AS Maths
                )

            [12] => Array
                (
                    [Course_ID] => 76
                    [Title] => GSE Maths Rs-Sit
                )

            [13] => Array
                (
                    [Course_ID] => 77
                    [Title] => A2 Further Maths
                )

            [14] => Array
                (
                    [Course_ID] => 78
                    [Title] => A2 Maths
                )

        )

)
-


其中的数据如下所示:

switch($_GET["cmd"]) {
    case "populateForm" :
        $return = json_encode( populateForm() );
        break;
    case "populateCourses" :
        $return = json_encode( populateCourses( $_GET["faculty"] ) );
        break;
}

echo $return;
Array
(
    [8] => Array
        (
            [0] => Array
                (
                    [Course_ID] => 59
                    [Title] => Core ICT
                )

            [1] => Array
                (
                    [Course_ID] => 60
                    [Title] => BTEC Business
                )

            [2] => Array
                (
                    [Course_ID] => 61
                    [Title] => BTEC ICT
                )

            [3] => Array
                (
                    [Course_ID] => 62
                    [Title] => GCSE Business
                )

            [4] => Array
                (
                    [Course_ID] => 63
                    [Title] => GCSE ICT
                )

        )

    [9] => Array
        (
            [0] => Array
                (
                    [Course_ID] => 64
                    [Title] => Advance BTEC Business
                )

            [1] => Array
                (
                    [Course_ID] => 65
                    [Title] => Advance BTEC ICT
                )

            [2] => Array
                (
                    [Course_ID] => 66
                    [Title] => AS Applied Business
                )

            [3] => Array
                (
                    [Course_ID] => 67
                    [Title] => AS Applied ICT
                )

            [4] => Array
                (
                    [Course_ID] => 68
                    [Title] => A2 Applied Business
                )

            [5] => Array
                (
                    [Course_ID] => 69
                    [Title] => A2 Applied ICT
                )

            [6] => Array
                (
                    [Course_ID] => 70
                    [Title] => A2 Economics
                )

            [7] => Array
                (
                    [Course_ID] => 71
                    [Title] => A2 Law
                )

            [8] => Array
                (
                    [Course_ID] => 72
                    [Title] => GCSE Maths
                )

            [9] => Array
                (
                    [Course_ID] => 73
                    [Title] => Maths
                )

            [10] => Array
                (
                    [Course_ID] => 74
                    [Title] => AS Further Maths
                )

            [11] => Array
                (
                    [Course_ID] => 75
                    [Title] => AS Maths
                )

            [12] => Array
                (
                    [Course_ID] => 76
                    [Title] => GSE Maths Rs-Sit
                )

            [13] => Array
                (
                    [Course_ID] => 77
                    [Title] => A2 Further Maths
                )

            [14] => Array
                (
                    [Course_ID] => 78
                    [Title] => A2 Maths
                )

        )

)
然而,一旦我使用JavaScript,我就不知道如何将这些数据处理到我要查找的
框中请注意数据接收正确。如果我在这个函数中
console.log(data)
,它会像预期的那样显示我的PHP脚本发送的所有数据

我正在尝试这个:

        $('#courses').on("click", "option", function(event) {
            var id = $(this).val();
            UWA.Data.getJson(Input.URL + '?cmd=populateCourses&faculty=' + id, Input.populateCourses);
        })
    }

Input.populateCourses = function(data) {
    $('#courses').empty();
    for (var i = 0; i < data.length; i++) {
        alert(data[i]);
        $('#courses').append('<optgroup label="' + data[i] + '>');
        for (var x = 0; x < data[i].length; x++) {
            $('#courses').append('<option value="' + data[i][x].Course_ID + '">' + data[i][x].Title + '</option>');
        }
        $('#courses').append('</optgroup>');
    }
}
$(“#课程”)。在(“单击”,“选项”,函数(事件){
var id=$(this.val();
UWA.Data.getJson(Input.URL+'?cmd=populateCourses&faculty='+id,Input.populateCourses);
})
}
Input.populateCourses=函数(数据){
$(“#课程”).empty();
对于(变量i=0;i$(“#courses”).append(“使用而不是
print\r()

使用而不是
print\r()

您想要
json\u encode
您的PHP数组。JS不知道如何处理该字符串输出

然后,在JS端,您需要
JSON.parse
将文本解析为一个JS对象,您可以正常使用它

如果在IE6/7中也需要它,那么需要在页面上显示Douglas Crockford的json2.js。
如果您不支持GhettoIE,那么您就不支持了。

如果您想
json\u编码
您的PHP数组,JS将不知道该如何处理该字符串输出

然后,在JS端,您需要
JSON.parse
将文本解析为一个JS对象,您可以正常使用它

如果在IE6/7中也需要它,那么需要在页面上显示Douglas Crockford的json2.js。
如果您不支持GhettoIE,那么您就不支持。

如果您正确地重新保存了数据,那么就没有必要向我们展示所有的php代码

我很确定你要看的功能是:

Input.populateCourses = function(data) {
    $('#courses').empty();
    for (var i = 0; i < data.length; i++) {
        alert(data[i]);
        $('#courses').append('<optgroup label="' + data[i] + '>');
        for (var x = 0; x < data[i].length; x++) {
            $('#courses').append('<option value="' + data[i][x].Course_ID + '">' + data[i][x].Title + '</option>');
        }
        $('#courses').append('</optgroup>');
    }
}
Input.populateCourses=函数(数据){
$(“#课程”).empty();
对于(变量i=0;i

解决方案二:

Input.populateCourses = function(data) {
    var $courses = $('#courses').empty();
    var $optgroup;
    for (var i = 0; i < data.length; i++) {
        $optgroup = $('<optgroup label="' + data[i] + '>').appendTo($courses);
        for (var x = 0; x < data[i].length; x++) {
            $('<option value="' + data[i][x].Course_ID + '">' + data[i][x].Title + '</option>').appendTo($optgroup);
        }
    }
}
Input.populateCourses=函数(数据){
var$courses=$('#courses').empty();
var$optgroup;
对于(变量i=0;i$optgroup=$('如果您正确地重新保存了数据,则无需向我们显示所有php代码

我很确定你要看的功能是:

Input.populateCourses = function(data) {
    $('#courses').empty();
    for (var i = 0; i < data.length; i++) {
        alert(data[i]);
        $('#courses').append('<optgroup label="' + data[i] + '>');
        for (var x = 0; x < data[i].length; x++) {
            $('#courses').append('<option value="' + data[i][x].Course_ID + '">' + data[i][x].Title + '</option>');
        }
        $('#courses').append('</optgroup>');
    }
}
Input.populateCourses=函数(数据){
$(“#课程”).empty();
对于(变量i=0;i

解决方案二:

Input.populateCourses = function(data) {
    var $courses = $('#courses').empty();
    var $optgroup;
    for (var i = 0; i < data.length; i++) {
        $optgroup = $('<optgroup label="' + data[i] + '>').appendTo($courses);
        for (var x = 0; x < data[i].length; x++) {
            $('<option value="' + data[i][x].Course_ID + '">' + data[i][x].Title + '</option>').appendTo($optgroup);
        }
    }
}
Input.populateCourses=函数(数据){
var$courses=$('#courses').empty();
var$optgroup;
对于(变量i=0;i
Input.populateCourses = function(data) {
    $('#courses').empty();
    for (var i in data) {
        alert(data[i]);
        /*...*/
    }
}
data
是php中的一个关联数组,它在javascript
for(数据中的变量i)中转换为具有数字属性的对象
将迭代对象的属性。

没有尝试过,但我猜问题在于您的数据不是一个基于零的数组,索引不是0,1,2,3等,因此循环不起作用。您应该尝试以下方法:

Input.populateCourses = function(data) {
    $('#courses').empty();
    for (var i in data) {
        alert(data[i]);
        /*...*/
    }
}

data
是php中的一个关联数组,它在javascript
for(数据中的变量i)中转换为具有数字属性的对象
将迭代对象的属性。

,谢谢,但这不是问题所在-我已经更新了我的代码以澄清问题。我最初留下了一些调试代码,使问题严重混淆@Ben:(@dunc.谢谢你的诚实。尽管如此,这是一个非常彻底的问题;如果有什么值得投票的话,谢谢,但这不是问题所在-我已经更新了我的代码来澄清。我最初留下了一些调试代码,其中显着混淆了问题@Ben:(@dunc.谢谢你的诚实。不过,这是一个非常彻底的问题;如果有什么值得投票的话。请重新阅读我的帖子,我在你添加答案之前做了更改。
print\u r
纯粹是为了调试。@dunc“我意识到print\r不能将信息发送到我的JS脚本”声明,您使用
print\r
的目的是向JS发送数据;在我发布此答案之前,问题中没有任何其他信息可见……还有问题标题“如何创建mul?”