php - PHP使用json_encode,必须输出具体数据
问题描述
我目前被困在这种情况下,现在其他开发人员想要输出附加图像上看到的 API 结构。
但我尽我所能,但我只得到了这些结果:
"all_projects": {
"TEST TOWNHOMES": {
"unit_types": [
{
"unit": "TOWNHOUSE 44.00"
}
]
},
"TEST HOMES": {
"unit_types": [
{
"unit": "DUPLEX WITH OUT GARAGE 44.50"
}
]
},
"TEST HOMES II": {
"unit_types": [
{
"unit": "DUPLEX WITH OUT GARAGE 44.50"
}
]
},
"TEST VILLAGE": {
"unit_types": [
{
"unit": "TOWNHOUSE 44.00"
},
{
"unit": "DUPLEX WITHOUT GARAGE 52.30"
}
]
}
我正在使用 MVC 框架,
这是我的模型看起来像:
public function all_south_projects()
{
$this->db->distinct();
return $this->db->select('Project as project_name')->from('lots')
->where('available','YES')
->get()->result();
}
public function get_unit_types($projName)
{
$this->db->distinct();
return $this->db->select('UnitType as unit')->from('lots')
->where('Project',$projName)
->where('Available','YES')
->get()->result();
}
然后我的控制器是:
$resp = $this->MyModel->all_south_projects();
$test_array = array();
foreach ($resp as $value) {
$units = $this->MyModel->get_unit_types($value->project_name);
$allunits = array("unit_types"=>$units);
$allunits = (object) $allunits;
$test_array[$value->project_name] = $allunits;
}
//var_dump($test_array);
$stat = 200;
$message = 'Successfully fetched.';
if(empty($test_array)){
$empty=json_decode('{}');
json_output2($stat,'all_projects',$message,$empty);
}else{
json_output2($stat,'all_projects',$message,$test_array);
}
json_output2 在我的助手上自定义 json 格式:这是我的代码:
function json_output2($statusHeader,$responseName,$message,$response)
{
$ci =& get_instance();
$ci->output->set_content_type('application/json');
$ci->output->set_status_header($statusHeader);
$ci->output->set_output(json_encode(array('status' =>
$statusHeader,'message' => $message,$responseName =>$response)));
}
注意:场景是:API 必须给所有的项目都有可用的单元,如果项目可用,那么它需要获取其对应的可用单元来查看。我知道我可以进行另一个 API 调用,但是这一次,我们需要改进 UX。
有人可以启发我解决这个问题吗?谢谢!
解决方案
更改此部分:
foreach ($resp as $value) {
$units = $this->MyModel->get_unit_types($value->project_name);
$allunits = array("unit_types"=>$units);
$allunits = (object) $allunits;
$test_array[$value->project_name] = $allunits;
}
至 :
foreach ($resp as $value) {
$units = $this->MyModel->get_unit_types($value->project_name);
$test_array[] = [
"project_name" => $value->project_name,
"unit_types" => $units
];
}
您不必像在那里那样将关联数组转换为对象:$allunits = (object) $allunits;
因为关联数组将始终被序列化为 JSON 对象(关联数组在 JSON 中不存在)。
推荐阅读
- android - setOnItemSelectedListener 关闭模拟器
- regex - 正则表达式匹配必须在另一个匹配之间
- node.js - 我无法使用 node.js 将我的数组推送到 mongodb 文档
- r - 我正在尝试使用 R 改变数据框中的特定变量
- javascript - 基于泛型类型定义 TypeScript 类型
- reactjs - 反应 npm run build 失败但 run start 有效
- c - 为什么当我第一次输入不同的内容时,while 循环会重复两次而不让我第二次扫描?
- ubuntu - hcitool lescan 不适用于蓝牙版本 5
- python-3.x - 如何获取列表中所有字符的所有索引?
- database - DynamoDB 是否保证在快速更新时收敛到最新数据?