Как вставить массив в пару ключ/значение json объекта i codeigniter array

Чего я пытаюсь достичь

Итак, чего я пытался добиться, так это вставить пару ключ/значение массива в объект JSON, который сам по себе является массивом, так что есть один объект, а одна из пар ключ-значение содержит массив.

ЭТО ТО, ЧЕГО Я ПЫТАЮСЬ ДОСТИГНУТЬ в виде вывода JSON, другого массива данных2 внутри другого массива данных.

   [
    {
    "data": {
        "temp_service_id": "3",
        "name": "health checkup",
        "price": "10000",
        "service_id": "41",
        "data2": [
             {
              "fees": "2000",
              "service_name": "Anaesthesiologist"
             },
             {
              "fees": "300",
              "service_name": "Andrologist"
             },
           ]
        },  
     }
   ] 

Что я пробовал
ЭТО МОЙ КОНТРОЛЛЕР:

        $where['subtype_id'] = $this->post('org_id');
        $where['is_active'] = 'Y';
        $table_package_master = 'package_master';
        $fetch_package_name = $this->$model_name->fetch($table_package_master,$where);
        $array = [];
        $array1 = [];
        $array2 = [];
        if($fetch_package_name){
            foreach($fetch_package_name as $row){
                $where_r['t1.package_num'] = $row->package_num;
                $where_r['t1.is_active'] = 'Y';
                $where_r['services.is_active'] = 'Y';
                $where_r['t4.is_active'] = 'Y';
                $fetch_packages1 = $this->$model_name->fetch_packages1($where_r);
                $array['data'] = $fetch_packages1;
                $fetch_packages = $this->$model_name->fetch_packages($where_r);
                foreach($fetch_packages as $row1){
                    $where_re['services.service_id'] = $row1->service_id;
                    $where_re['services.is_active'] = 'Y';
                    $where_re['template_services.is_active'] = 'Y';                          

                    $fetch_package_ser = $this->$model_name->fetch_service_details($where_re);
                    array_push($array1,$fetch_package_ser);
                }
            }
            $array['data2'] = $array1;
            $array3 = [$array];
            $this->response($array3);
          }

ЭТО МОЯ МОДЕЛЬ:

             function fetch($table,$where_con){
             $this->db->select('*')->from($table)->where($where_con);
              return $this->db->get()->result();
                }

                function fetch_packages1($where){
             $this->db->select('t3.temp_service_id,t4.name,t4.price,services.service_id');
              $this->db->from('package_services as t1');
             $this->db->join('services','services.service_id = t1.service_id', 'LEFT');
             $this->db->join('template_services as t3','t3.temp_service_id = services.temp_service_id' , 'LEFT');
             $this->db->join('package_master as t4', 't4.package_num = t1.package_num','LEFT');
             $this->db->where($where);
             $this->db->group_by('t1.package_num');
             return $this->db->get()->row();
           }

          function fetch_service_details($where){
           $this->db->select('services.price as fees,template_services.service_name');
           $this->db->from('services');
           $this->db->join('template_services','template_services.temp_service_id = 
           services.temp_service_id','LEFT');
           $this->db->where($where);
           return $this->db->get()->row();
            }

В основном то, что я пытаюсь сделать, это поместить объект данных в переменную $array, которая представляет собой данные, поступающие из одной таблицы. Теперь я ввел данные из другого запроса в $array1. В конце концов все, что я сделал, это array_push в $array3 все данные из $array1 и $array2, чтобы объединить их, но МОЙ ВЫВОД ЭТО:

         [
            {
             "data": {
                "temp_service_id": "3",
                "name": "health checkup",
                "price": "10000",
                "service_id": "41"
                     },
             "data2":  [
                     {
               "fees": "2000",
               "service_name": "Anaesthesiologist"
                     },
                     {
               "fees": "300",
               "service_name": "Andrologist"
                     }
               ]
            }
        ]

Что мне здесь не хватает? я действительно запутался и не могу понять, как нажать массив data2. Заранее спасибо :)


person Satyam thassu    schedule 25.11.2019    source источник
comment
Попробуйте переписать $array['data2'] = $array1; на $array['data']['data2'] = $array1;, должно помочь   -  person Aksen P    schedule 25.11.2019
comment
Большое спасибо за ответ :) Я сделал то, что вы сказали, и вот ошибка, которую я получил, Uncaught Error: невозможно использовать объект типа stdClass в качестве массива в трассировке стека: # 0 C:\xampp\htdocs\sanatorium1\application\libraries\ REST_Controller.php(431): Sanhc-›fetch_packages_in_org_post() C:\xampp\htdocs\sanatorium1\application\libraries\REST_Controller.php(418): REST_Controller-›_fire_method(Array, Array) #2   -  person Satyam thassu    schedule 25.11.2019


Ответы (2)


Перепишите одну строку в вашем Контроллере $array['data2'] = $array1; с помощью $array->data['data2'] = $array1;.

Он поместит массив data2 в индекс data.

Рабочая демонстрация

person Aksen P    schedule 25.11.2019
comment
мне нужно объявить выше двух, что это двухмерный массив? $массив = [][]; - person Satyam thassu; 25.11.2019
comment
@Satyam, нет, попробуйте просто создать новое поле data2 - person Aksen P; 25.11.2019
comment
Он выдает эту ошибку: Uncaught Error: невозможно использовать объект типа stdClass в качестве массива. - person Satyam thassu; 25.11.2019
comment
@Satyam, даже с ->? - person Aksen P; 25.11.2019
comment
теперь он все еще выдает ошибку, мне нужно заменить $array['data'] = $fetch_packages1; с ---› $array-›data = $fetch_packages1; - person Satyam thassu; 25.11.2019
comment
@Satyam, ты можешь попробовать, сейчас я пишу пример для работы. Но вы разобрались, что нужно менять однозначно) - person Aksen P; 25.11.2019
comment
хорошо, @Aksen P, я тоже пытаюсь здесь, спасибо за ваше руководство :) - person Satyam thassu; 25.11.2019
comment
нет @Aksen P, он просто напечатал два объекта массива отдельно, чего я пытался добиться, так это массив внутри пары ключ-значение внешнего массива в одном объекте - person Satyam thassu; 25.11.2019
comment
Давайте продолжим обсуждение в чате. - person Aksen P; 25.11.2019

Я нашел решение, наконец, после долгих размышлений об этом

     $fetch_package_name = $this->$model_name->fetch($table_package_master,$where);
        $array = [];
        $array1 = [];
        if($fetch_package_name){
            for($i=0;$i<sizeof($fetch_package_name); $i++){
                $where_r['t1.package_num'] = $fetch_package_name[$i]->package_num;
                $where_r['t1.is_active'] = 'Y';
                $where_r['services.is_active'] = 'Y';
                $where_r['t4.is_active'] = 'Y';
                $fetch_packages1 = $this->$model_name->fetch_packages1($where_r);

                $array[$i]['name'] = $fetch_package_name[$i]->name;
                $array[$i]['price'] = $fetch_package_name[$i]->price;
                $where_re['t1.package_num'] = $fetch_package_name[$i]->package_num;
                $where_re['t1.is_active'] = 'Y';
                $where_re['services.is_active'] = 'Y';
                $fetch_packages = $this->$model_name->fetch_packages2($where_re);
                for($j=0; $j<sizeof($fetch_packages); $j++){
                    $array1[$j]['service_name'] = $fetch_packages[$j]->service_name;
                    $array1[$j]['price'] = $fetch_packages[$j]->price;
                }
                $array[$i]['data2'] = $array1;
            }
            // $this->response($array);
            $array2['data'] = $array;
            $array2['status'] = 10007; 
            // $data_response['data'] = $array;
            $this->response($array2);
    }       

Это дало мне ответ, которого я хотел в первую очередь.

  { 
     "data":[ 
           { 
            "name":"Full body checkup",
             "price":"5000",
                "data2":[ 
                    { 
                    "service_name":"Allergist",
                    "price":"23"
                    },
                    { 
                    "service_name":"Andrologist",
                    "price":"300"
                    }
                 ]
            } 
      ],
  }

Ваше здоровье! удачного кодирования :-)

person Satyam thassu    schedule 27.11.2019