PHP, использующий json_encode, должен выводить конкретные данные - PullRequest
0 голосов
/ 17 января 2019

В данный момент я застрял в этом сценарии, теперь другой разработчик хочет вывести структуру 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 framework,

Это моя модель выглядит так:

 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.

Может ли кто-нибудь просветить меня, чтобы пройти через это? Спасибо!

1 Ответ

0 голосов
/ 17 января 2019

Изменить эту часть:

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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...