在这种情况下,构建JSON数组最聪明的方法是什么?

时间:2013-11-26 12:30:54

标签: php jquery json codeigniter jquery-select2

我正在使用codeigniter php frameworkselect2 jquery plugin

我想用其id加载存储在我的数据库中的所有名称,所以我使用这样的查询:

select id, name from drivers;

然后我格式化这种方式返回的结果:

$data = array()

foreach ($query->result_array() as $row){
    $data[$row["id"]] = $row["name"];
}

return $data;

之后,我打印用JSON编码的数组,它被ajax收到。 在jquery中我做了这样的事情:

var html_res = "<option></option>";

$.each(data_json, function(key, value){
    html_res += "<option value='" + key + "'>" + value + "</option>";
});

$("#my-select2").html(html_res);

它有效,但如果有一种有效/最简单的方法可以获得相同的结果,我真的很感兴趣。


另外我还有一个小问题:现在我有一个如上所述的查询:

select id, name, age from drivers;

我想在两个不同的<optgroup>中的select2插件中加载内容:

  • 第一个将包含年龄> gt的驱动程序; 50。
  • 最后一个带有年龄的驱动器&lt; 50。

但我不知道在这种情况下在php中构造关联数组的最佳做法是什么,之后,使用$.each函数在select2中加载它。

你可以告诉我你是怎么做到的吗?我只是想出第一个问题的解决方案(不知道是否是最好的)。但我担心第二个人没有人。

任何提示,帮助或建议都将受到赞赏,如果您需要更多信息,请告诉我,我将编辑该帖子。

1 个答案:

答案 0 :(得分:1)

类似的东西:

<强> PHP

$data = array(
    "under 50" => array(),
    "over 50" => array()
);

foreach ($query->result_array() as $row){
    $el = array(
        "name" => $row["name"],
        "age" => $row["age"]
    );
    if ($row["age"] < 50) {
        $data["under 50"][$row["id"]] = $el;
    } else {
        $data["over 50"][$row["id"]] = $el;
    }
}

return $data;

<强> JS

var html_res = "<optgroup><option></option>";

$.each(data_json["under 50"], function(key, row){
    html_res += "<option value='" + key + "'>" + row.name + "</option>";
});
html_res += "</optgroup><optgroup>"
$.each(data_json["over 50"], function(key, row){
    html_res += "<option value='" + key + "'>" + row.name + "</option>";
});
html_res += "</optgroup>";

$("#my-select2").html(html_res);

您并不一定要发送年龄,但这是扩展您的驱动程序列表的方法。此外,您显然需要查询年龄。