PHP使用json_encode,必须输出具体数据

标签 php arrays json object

我目前陷入了这种情况,现在其他开发人员想要输出如附图所示的 API 结构。

json_required_format

但是我尽我所能,但只得到了这些结果:

 "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();
}

然后我的 Controller 是:

   $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 调用,但这一次,我们需要改进用户体验。

有人可以启发我解决这个问题吗?谢谢!

最佳答案

更改这部分:

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 中不存在数组)。

关于PHP使用json_encode,必须输出具体数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54232120/

相关文章:

php - 使用 MySQL 命令提交 php 时出现内部服务器错误

javascript - 使用 JavaScript 创建数组并将其存储在 sessionStorage 中?

java - 当键是数字时解析 json 时出现解析错误

ios - Codables 错误与 Alamofire "Cannot convert value of type ' [字符串 : Any ]' to expected argument type ' Data'"

arrays - AS3 : AddChild based on Array Value

javascript - 更改嵌套 JSON 结构中的键名

php - 使用 PDO 但仍然可以 SQL 注入(inject)

php - 如何从 PHP 中的 unicode 代码点获取字符?

php - PHP 单元测试中基于 XSD 模式的 XML 验证

c - 需要了解一个用输出覆盖输入的简单示例