我正在使用codeigniter php framework和select2 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插件中加载内容:
但我不知道在这种情况下在php中构造关联数组的最佳做法是什么,之后,使用$.each
函数在select2中加载它。
任何提示,帮助或建议都将受到赞赏,如果您需要更多信息,请告诉我,我将编辑该帖子。
答案 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);
您并不一定要发送年龄,但这是扩展您的驱动程序列表的方法。此外,您显然需要查询年龄。