以{index:{key1:value1,key2:valu2,...}}的形式编码json,其中index = key1 in PHP

时间:2012-12-18 11:33:52

标签: php jquery json

我正在获取查询结果并将其转换为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"}}

这样我的数据就像索引:{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都是数据中的 id

3 个答案:

答案 0 :(得分:3)

在PHP 5.3+上你可以这样做:

$data = json_encode($result, JSON_FORCE_OBJECT);

来自Manual

  

<强> 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>";

答案 1 :(得分: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);

答案 2 :(得分: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);