0

我正在获取查询结果并将其转换为 json。在这里查看我的代码 -

$sql = "select * from students";
$query = $this->db->query($sql);
if($query->num_rows() != 0 ){
    $result = $query->result();
    $data = json_encode($result);
}

所以,对于我的学生表中的两行,数据就像-

[{"id": "1", "name": "foo", "email": "foo@example.com"}, {"id": "2", "name": "bar", "email": "bar@example.com"}]

所以基本上我得到了一个数组。但我想像这样编码它 -

{"1": {"id": "1", "name": "foo", "email": "foo@example.com"}, "2": {"id": "2", "name": "bar", "email": "bar@example.com"}}

这样我的数据就像 index: {key1: val1, key2: val2} 其中 index 是 key1。我该怎么做呢?

此处数据的原因是我的 js 使用上述数据为我的复选框提供 id -

destTable = $('#dataTable');
$.post("/examplec/getData",
        params, function(data) {
        var newRow;
        var json = $.parseJSON(data);
        $(json).each(function(i,val){
            newRow = "<tr><td style='right:10px'><input type='checkbox' name = 'case' class = 'case' id=" + i + " onclick='checkAll();'></td>";
            $.each(val,function(k,v){
                newRow = newRow + "<td>" + v + "</td>";
            });
            newRow = newRow + "</tr>";
            destTable.append(newRow);
        });

});

来自 MVC 模式的模型将数据返回到控制器examplec.php。但我希望每个复选框的id都是我的data中的 id 。

4

3 回答 3

3

在 PHP 5.3+ 上,您可以执行以下操作:

$data = json_encode($result, JSON_FORCE_OBJECT);

手册

JSON_FORCE_OBJECT
使用非关联数组时输出对象而不是数组。当输出的接收者期待一个对象并且数组为空时特别有用。自 PHP 5.3.0 起可用。

编辑:您不需要 ID 作为密钥,这样做只是在复制数据。您可以访问该id属性并将其分配为复选框 ID:

newRow = "<tr><td style='right:10px'><input type='checkbox' name = 'case' class = 'case' id='" + val.id + "' onclick='checkAll();'></td>";
于 2012-12-18T11:39:57.477 回答
2

你可以这样:

$results = $query->result();

$data = array();

foreach($results as $result)
{
    // Assuming it returns objects, not arrays, else use $result["id"]
    $data[$result->id] = $result;
}

echo json_encode($data);
于 2012-12-18T11:37:46.133 回答
0
$sql = "select * from students";
$query = $this->db->query($sql);
$res=array();
if($query->num_rows() != 0 ){
    $result = $query->result();
    $res[]=$result;

}
$data = json_encode($res);
于 2012-12-18T11:44:46.237 回答