如何在Codeigniter中返回对象而不是数组?

时间:2019-06-16 03:24:00

标签: php arrays codeigniter object

当我尝试返回对象时,我在Codeignter中遇到了一个问题,其中一些控制器代码是

$sql = $this->user_model->userdetail($data);
    if ($sql) {
        echo json_encode(array(
            "status" => "0",
            "message" => "",
            "data" => $sql
    ));
    exit();
}

型号代码是

function userdetail($data) {
    $id = $data["id"];
    $sql = "select email, name from user where id='".$id."'";
    $query = $this->db->query($sql);
    if ($query->num_rows() > 0) {
        return $query->result_array();
    }
    return $query->num_rows();
}

我可以得到结果

{
    "status": "0",
    "message": "",
    "data": [
    {
        "email": "lily@email.com",
        "name": "lily"
    }
    ]
}

这里data是一个数组,但是它应该是一个对象,上面的结果应该是这样

{
    "status": "0",
    "message": "",
    "data": {
        "email": "lily@email.com",
        "name": "lily"
    }
}

然后我在模型代码中将return $query->result_array();更改为return $query->result_object();,但是没有用,我该怎么办?非常感谢。

3 个答案:

答案 0 :(得分:0)

我认为我在模型中找到了原因

return $query->result_array(); // also can be changed to return $query->result_object(); or return $query->result();

它们可以返回数组或对象,并且可以在控制器文件中

$sql = $this->user_model->userdetail($data);

$sql应该是数组或对象,但实际上它会返回这样的多维数组

返回result()或result_object()

Array
(
    [0] => stdClass Object
        (
            [email] => lily@email.com
            [name] => lily
        )

)

返回result_array()

Array
(
    [0] => Array
        (
            [email] => lily@email.com
            [name] => lily
        )

)

很奇怪。

答案 1 :(得分:0)

在代码点火器$query->result_array();中,它以数组格式返回结果。

要获得对象格式的结果,请像

一样使用$query->result();
if ($query->num_rows() > 0) {
        return $query->result();
    }

对于单行,请使用$query->result_array()

答案 2 :(得分:0)

也许您需要在json_encode中使用JSON_FORCE_OBJECT。

echo json_encode(array(
        "status" => "0",
        "message" => "",
        "data" => $sql), JSON_FORCE_OBJECT);