Как установить ключ в многомерном массиве? - PullRequest
0 голосов
/ 26 сентября 2019

Я хочу, чтобы мой результат json был таким:

[{
    "api_code": "111402",
    "nama_proyek": "PLTA LAU GUNUNG 2x7.5 MW",
    "dvo": "INFRA 2",
    "project_progress_plan": "96.644",
    "id": "7187",
    "rencana": [
      "Segera Dibuatkan  Addendum  waktu & Addendum Kontrak ",
      "Segera dibuatkan Addendum Kontrak ke 5"
    ],
    "target": "09/20/2019",
    "status": "open",
    "realisasi": "76.53",
    "project_progress_real": "93.04",
    "progress_deviasi": "-20.114",
    "end_date": "09-09-2019",
    "start_date": "22-12-2015"
  },
{
    "api_code": "218007",
    "nama_proyek": "Pembangunan Simpang Susun Sentul Selatan",
    "dvo": "INFRA 1",
    "project_progress_plan": "81.69",
    "id": "7301",
    "rencana": [
      "Dengan adanya  addendum  1 maka masa pelaksanaan sampai dengan  bulan  Maret 2020  dengan revisi progres Renacana 31.992 % Realiasasi 34.564 %  deviasi + 2.572 "
    ],
    "target": "09/09/2019",
    "status": "open",
    "realisasi": "35.556",
    "project_progress_real": "44.98",
    "progress_deviasi": "-46.134",
    "end_date": "27-10-2019",
    "start_date": "29-01-2019"
  }],

, но мой результат json будет таким, если я удалю в своем коде ключ, значение зацикливается только один раз:

"111402": {
    "api_code": "111402",
    "nama_proyek": "PLTA LAU GUNUNG 2x7.5 MW",
    "dvo": "INFRA 2",
    "project_progress_plan": "96.644",
    "id": "7187",
    "rencana": [
      "Segera Dibuatkan  Addendum  waktu & Addendum Kontrak ",
      "Segera dibuatkan Addendum Kontrak ke 5"
    ],
    "target": "09/20/2019",
    "status": "open",
    "realisasi": "76.53",
    "project_progress_real": "93.04",
    "progress_deviasi": "-20.114",
    "end_date": "09-09-2019",
    "start_date": "22-12-2015"
  },
  "218007": {
    "api_code": "218007",
    "nama_proyek": "Pembangunan Simpang Susun Sentul Selatan",
    "dvo": "INFRA 1",
    "project_progress_plan": "81.69",
    "id": "7301",
    "rencana": [
      "Dengan adanya  addendum  1 maka masa pelaksanaan sampai dengan  bulan  Maret 2020  dengan revisi progres Renacana 31.992 % Realiasasi 34.564 %  deviasi + 2.572 "
    ],
    "target": "09/09/2019",
    "status": "open",
    "realisasi": "35.556",
    "project_progress_real": "44.98",
    "progress_deviasi": "-46.134",
    "end_date": "27-10-2019",
    "start_date": "29-01-2019"
  },

и это мой код, код является внутренним соединением из 3 таблиц, и один "proyek" имеет много "rencana", в этом случае я сделал для группировки его по "api_code", но результат не совпадает с моим ожиданием:

$proyek = $this->db->query("SELECT proyek.api_code, proyek.nama_proyek, proyek.dvo,
    pp_proyek.project_progress_plan, proyek.id, proyek_kritis_rencana.rencana, 
    proyek_kritis_rencana.target, proyek_kritis_rencana.status, 
    proyek.realisasi, proyek.project_progress_real, proyek.progress_deviasi, 
    pp_proyek.end_date, pp_proyek.start_date FROM proyek 
    INNER JOIN pp_proyek ON pp_proyek.code = proyek.api_code 
    INNER JOIN proyek_kritis_rencana ON proyek_kritis_rencana.proyek = proyek.id")->result_array();



$last = array();
foreach($proyek as $row){
    $id = $row['api_code'];
        if(isset($last[$id])){
            $last[$id]['rencana'][] = $row['rencana'];
        }else{
            $row['rencana'] = array($row['rencana']);
            $last[$id] = $row;
        }
}

1 Ответ

1 голос
/ 26 сентября 2019

Вы можете использовать функцию array_values() в вашем массиве $last, которая удалит ключи идентификации

$last = array(
    "111402" => array(
        "api_code" => "111402",
        "nama_proyek" => "PLTA LAU GUNUNG 2x7.5 MW",
        "dvo" => "INFRA 2",
    )
    , "218007" => array(
        "api_code" => "218007",
        "nama_proyek" => "Pembangunan Simpang Susun Sentul Selatan",
        "dvo" => "INFRA 1",     
    )
 );

 echo json_encode($last);

 $last = array_values($last); // remove keys
 echo json_encode($last);

Первый вывод:

{"111402":{
    "api_code":"111402",
    "nama_proyek":"PLTA LAU GUNUNG 2x7.5 MW",
    "dvo":"INFRA 2"
},"218007":{
    "api_code":"218007",
    "nama_proyek":"Pembangunan Simpang Susun Sentul Selatan",
    "dvo":"INFRA 1"}
}

Второй вывод (простой массив, не больше идентификационных ключей):

[{
    "api_code":"111402",
    "nama_proyek":"PLTA LAU GUNUNG 2x7.5 MW",
    "dvo":"INFRA 2"
 },{
    "api_code":"218007",
    "nama_proyek":"Pembangunan Simpang Susun Sentul Selatan",
    "dvo":"INFRA 1"
}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...