在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"
}
感谢所有输入!
答案 0 :(得分:3)
只需使用:
array("email" => $result->row());
查看CI documentation on queries和row()
:
此函数返回单个结果行。如果您的查询有多行,则只返回第一行。结果作为对象返回。
答案 1 :(得分:1)
第一个将email
定义为对象。
第二个将email
定义为包含一个项目的普通数组,该项目本身就是对象。
例如,要使用id
的第一种形式访问email
属性,您应该:
var id = obj.email.id;
第二种形式:
var id = obj.email[0].id;
编辑:回答你的新问题“如何让第二个看起来像第一个” - 你做不到。第二种形式是定义完全不同的东西,您只需要更改访问email
的方式,如果总是有一个项目,请使用上面示例代码中的email[0]
。
答案 2 :(得分:1)
第一个是一个JSON对象,它有一个属性/成员email
,它又是一个包含属性id
,desc
等的JSON对象。
另一方面,第二个是一个JSON对象,其属性email
是一个JSON数组,包含 1 元素,其属性为id
, desc
等。
基本上,如果我要转换对value_1
字段值的访问权限:
1个对象:
obj.email.value_1
2对象:
obj.email[0].value_1