Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Membuat JSON bersarang menggunakan PHP MySQL

Untuk mengelompokkan data subarray secara efisien, Anda harus menerapkan kunci sementara. cityId adalah nilai yang cocok untuk dikelompokkan -- karena cityNames mungkin sengaja menggandakan di masa mendatang tetapi cityId tidak boleh membatalkan/secara tidak sengaja menduplikasi di tabel database Anda.

Ketika setiap cityId baru ditemui, isset() bersyarat panggilan akan menentukan apakah set data baru/lengkap harus disimpan, atau apakah data hanya ditambahkan ke subarray.

Saya memanggil array_slice() karena ini mengurangi sintaks / code-bloat yang tidak perlu.

Setelah mengulangi semua baris, Anda dapat mengindeks ulang $result array, taruh di dalam runBasedOnCity , dan tambahkan status elemen.

Saya akan menunjukkan demo saya dengan PRETTY_PRINT sehingga lebih mudah dibaca, tetapi dalam kode Anda yang sebenarnya, Anda harus menghapus parameter. Juga, saran -- usahakan agar nama variabel Anda tetap singkat untuk meningkatkan keterbacaan.

Kode:(Demo )

$resultset = [
    ["id" => "1", "cityId" => "1", "cityName" => "Bengaluru", "runId" => "2", "distance" => "10k", "status" => "1"],
    ["id" => "2", "cityId" => "1", "cityName" => "Bengaluru", "runId" => "1", "distance" => "5k", "status" => "1"],
    ["id" => "3", "cityId" => "1", "cityName" => "Bengaluru", "runId" => "5", "distance" => "3k", "status" => "0"],
    ["id" => "4", "cityId" => "2", "cityName" => "Chennai", "runId" => "1", "distance" => "5k", "status" => "1"],
    ["id" => "5", "cityId" => "2", "cityName" => "Chennai", "runId" => "2", "distance" => "10k", "status" => "1"],
    ["id" => "6", "cityId" => "2", "cityName" => "Chennai", "runId" => "4", "distance" => "15k", "status" => "1"]
];

foreach ($resultset as $row) {
    if (!isset($result[$row["cityId"]])) {
        $result[$row["cityId"]] = array("id" => $row["id"], "cityId" => $row["cityId"], $row["cityName"] => array(array_slice($row,-3)));
    } else {
        $result[$row['cityId']][$row["cityName"]][] = array_slice($row,-3);
    }
}

if (!isset($result)) {   // don't need to check rowCount() at all
    $result = 'Runs not found';
} else {
    $result = array_values($result);
}

$result = array("status" => true, "runsBasedOnCity" => $result);

var_export(json_encode($result, JSON_PRETTY_PRINT));

Keluaran:

'{
    "status": true,
    "runsBasedOnCity": [
        {
            "id": "1",
            "cityId": "1",
            "Bengaluru": [
                {
                    "runId": "2",
                    "distance": "10k",
                    "status": "1"
                },
                {
                    "runId": "1",
                    "distance": "5k",
                    "status": "1"
                },
                {
                    "runId": "5",
                    "distance": "3k",
                    "status": "0"
                }
            ]
        },
        {
            "id": "4",
            "cityId": "2",
            "Chennai": [
                {
                    "runId": "1",
                    "distance": "5k",
                    "status": "1"
                },
                {
                    "runId": "2",
                    "distance": "10k",
                    "status": "1"
                },
                {
                    "runId": "4",
                    "distance": "15k",
                    "status": "1"
                }
            ]
        }
    ]
}'

Setelah menjelaskan bagaimana Anda ingin mempertahankan id nilai dalam subarray, inilah solusinya:

Kode:(Demo )

foreach ($resultset as $row) {
    if (!isset($result[$row["cityId"]])) {
        $result[$row["cityId"]] = array("cityId" => $row["cityId"], $row["cityName"] => array(array("id" => $row["id"])+array_slice($row,-3)));
    } else {
        $result[$row['cityId']][$row["cityName"]][] = array("id" => $row["id"])+array_slice($row,-3);
    }
}

if (!isset($result)) {   // don't need to check rowCount() at all
    $result = 'Runs not found';
} else {
    $result = array_values($result);
}

$result = array("status" => true, "runsBasedOnCity" => $result);
var_export(json_encode($result, JSON_PRETTY_PRINT));



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa yang terjadi jika koneksi MySQL terus menerus tidak ditutup pada halaman PHP?

  2. Bedakan duplikat dalam loop foreach dari sql

  3. Bisakah saya bergabung dengan dua tabel di mana tabel yang digabungkan diurutkan berdasarkan kolom tertentu?

  4. permintaan mysql untuk mendapatkan induk root

  5. Lebih dari dan Kurang dari kueri MySql gagal dengan bidang desimal