【问题标题】:What is the smartest way to structure a JSON array in this case?在这种情况下,构造 JSON 数组的最聪明的方法是什么?
【发布时间】:2013-12-11 14:25:44
【问题描述】:

我正在使用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;

我想在两个不同&lt;optgroup&gt;的select2插件中加载内容:

  • 第一个将包含年龄 > 50 岁的司机。
  • 最后一位年龄

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

你能告诉我你是怎么做到的吗?我只为第一个问题提出了那个解决方案(不知道是否是最好的)。但恐怕我没有第二个。

我们将不胜感激任何提示、帮助或建议,如果您需要更多信息,请告诉我,我会编辑帖子。

【问题讨论】:

    标签: php jquery json codeigniter jquery-select2


    【解决方案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);
    

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

    【讨论】:

    • 谢谢!现在想象一下,我想加载驱动程序的国家/地区,而不是年龄,并将它们加载到选项组中。 php 数组将是这样的:$data[$row["country"]][$row["id"]] = $row["name"]。但是如何在 jQuery 中解析它呢?你不能使用$.each(data_json["spain"], ...,因为你不知道加载了多少个国家。
    • 您首先执行$.each(data_json, ..),这将为您提供Spain 作为其中一个keys,驱动程序列表为value
    • 类似这样的东西:chopapp.com/#k6wm10dc ?如果是这样,你对我帮助很大。我想了解这件事很久了。 :)
    • 我不确定你的意思。该链接给了我一个空白页面。
    猜你喜欢
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多