簡體   English   中英

在 json codeigniter 中制作 json 數組

[英]make json array in json codeigniter

請幫忙,我被困在使用 codeigniter 制作 json 上。

這就是我想要我的 json 的樣子

在此處輸入圖像描述

{
  "pelajar": [
    {
      "id": "1",
      "name": "rumah sakit",
      "usia": "45",
      "tahun": "2020",
      "alamat": "jalan kartini"
    },
    {
      "id": "2",
      "name": "rumah sakit umum",
      "usia": "28",
      "tahun": "2020",
      "alamat": "jalan ibu",
      "pendidikan": [
        {
          "id_pelajar": "2",
          "sekolah": "SDN Lombok timur"
        },
        {
          "id_pelajar": "2",
          "sekolah": "SMPN Lombok timur"
        }
      ]
    }
  ]
}

但是,我不知道為什么我的代碼不能讓它喜歡它。

這就是我的代碼 output: 在此處輸入圖像描述

{
  "pelajar": {
    "pelajar": [
      {
        "id": "1",
        "name": "rumah sakit",
        "usia": "45",
        "tahun": "2020",
        "alamat": "jalan kartini"
      },
      {
        "id": "2",
        "name": "rumah sakit umum",
        "usia": "28",
        "tahun": "2020",
        "alamat": "jalan ibu"
      }
    ],
    "pendidikan": [
      {
        "id_pelajar": "2",
        "sekolah": "SDN Lombok timur"
      },
      {
        "id_pelajar": "2",
        "sekolah": "SMPN Lombok timur"
      }
    ]
  }
}

這是我的代碼:

$query = $this->db->query("select * from learn") -> result();
        $response = array();
        $data = array();
        $datap = array();

        foreach($query as $row){

            $data[] = array(
                    "id"=> $row->id,
                    "name"=>$row->name,
                    "usia"=>$row->usia,
                    "tahun"=>$row->tahun,
                    "alamat"=>$row->alamat

            );

            $id = $row->id;
            $pendidikanquery = $this->db->query("select * from pendidikan where learn_id='$id'" ) -> result();
            foreach($pendidikanquery as $pen){
                $datap[] = array(
                    "id_pelajar"=> $pen->id_pelajar,
                    "sekolah"=> $pen->sekolah
                );
            }


            }
        }

        $response['pelajar']['pelajar'] = $data;
        $response['pelajar']['pendidikan'] = $datap;

        header('Content-Type: application/json');
        echo json_encode($response, TRUE);

我的問題是在 pelajar 列表中設置“pendidikan”,其中來自 pendidikan 的 id_pelajar 與來自 pelajar 表的 id 相同。

老實說,要修復的東西太多了,這個腳本可能應該被完全重寫,但我不准備在手機上這樣做。

我建議在您的 model(不是您的控制器)中使用 Active Record 技術。

在推入第一級之前緩存子數組數據。 這樣做,您維護了父 id 和子數組數據之間的關系。

需要明確的是,我的代碼片段總是會創建一個pendidikan子數組——即使它沒有數據。 如果您不希望這種行為,您將需要修改腳本以檢查子數組是否為空,然后有條件地將其包含到父數組中。 如果這是我的項目,我更喜歡一致的數據結構,這樣后續流程就不需要再次檢查特定鍵是否存在。

未經測試的代碼:

$query = $this->db->query("SELECT * FROM learn")->result();
$data = [];
foreach($query as $row){
    $datap = [];
    $pendidikanquery = $this->db->query("SELECT * FROM pendidikan WHERE learn_id = {$row->id}")->result();
    foreach ($pendidikanquery as $pen) {
        $datap[] = [
            "id_pelajar" => $pen->id_pelajar,
            "sekolah" => $pen->sekolah
        ];
    }
    $data[] = [
        "id" => $row->id,
        "name" => $row->name,
        "usia" => $row->usia,
        "tahun" => $row->tahun,
        "alamat" => $row->alamat,
        "pendidikan" => $datap
    ];
}

header('Content-Type: application/json');
echo json_encode(["pelajar" => $data]);

如果您想要 output 像您的第一張圖片(帶有紅色方塊的圖片)-

$response['pelajar']['pendidikan'] = $datap; // change this one to
// this ↓↓
$response['pelajar']['pelajar']['pendidikan'] = $datap; // change it like this

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM