PHP和Codeigniter。如何返回数组对象而不是普通数组?

时间:2011-08-28 11:28:29

标签: php arrays codeigniter

在Codeigniter中,我正在创建一个数组并将其返回给用户。我正在创建这样的数组(结果是数据库查询的返回形式):

array("email" => $result)

现在输出:

"email": [
    {
        "id": "629",
        "desc": "0000",
        "value_1": "0000",
        "value_2": null,
        "value_3": null,
        "value_4": null,
        "privacy": "0"
    }
]

所以$result是一个包含单个对象的数组。如何让$result仅包含对象?像这样:

"email": {
    "id": "628",
    "desc": "THIS IS IT",
    "value_1": "THIS IS IT2",
    "value_2": null,
    "value_3": null,
    "value_4": null,
    "privacy": "0"
}

感谢所有输入!

3 个答案:

答案 0 :(得分:3)

只需使用:

array("email" => $result->row());

查看CI documentation on queriesrow()

  

此函数返回单个结果行。如果您的查询有多行,则只返回第一行。结果作为对象返回。

答案 1 :(得分:1)

第一个将email定义为对象

第二个将email定义为包含一个项目的普通数组,该项目本身就是对象

例如,要使用id的第一种形式访问email属性,您应该:

var id = obj.email.id;

第二种形式:

var id = obj.email[0].id;

编辑:回答你的新问题“如何让第二个看起来像第一个” - 你做不到。第二种形式是定义完全不同的东西,您只需要更改访问email的方式,如果总是有一个项目,请使用上面示例代码中的email[0]

答案 2 :(得分:1)

第一个是一个JSON对象,它有一个属性/成员email,它又是一个包含属性iddesc等的JSON对象。

另一方面,第二个是一个JSON对象,其属性email是一个JSON数组,包含 1 元素,其属性为iddesc等。

基本上,如果我要转换对value_1字段值的访问权限:

1个对象:

obj.email.value_1

2对象:

obj.email[0].value_1