Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tạo JSON lồng nhau bằng PHP MySQL

Để nhóm dữ liệu mảng con một cách hiệu quả, bạn nên triển khai các khóa tạm thời. cityId là một giá trị thích hợp để nhóm theo - bởi vì cityNames có thể cố ý trùng lặp trong tương lai nhưng cityId không bao giờ được bỏ / cố ý trùng lặp trong bảng cơ sở dữ liệu của bạn.

Khi mỗi cityId mới gặp phải, isset() có điều kiện lệnh gọi sẽ xác định xem có nên lưu trữ một tập dữ liệu mới / đầy đủ hay không, hay dữ liệu chỉ nên được nối vào mảng con.

Tôi đang gọi array_slice() vì nó cắt giảm cú pháp / mã-bloat không cần thiết.

Sau khi lặp lại tất cả các hàng, bạn có thể lập chỉ mục lại $result mảng, lồng nó vào bên trong runBasedOnCity và thêm status phần tử.

Tôi sẽ hiển thị bản trình diễn của mình với PRETTY_PRINT để dễ đọc hơn, nhưng trong mã thực của bạn, bạn nên loại bỏ tham số. Ngoài ra, một lời khuyên - hãy cố gắng giữ cho tên biến của bạn ngắn gọn để cải thiện khả năng đọc.

Mã:( 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));

Đầu ra:

'{
    "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"
                }
            ]
        }
    ]
}'

Sau khi giải thích cách bạn muốn giữ lại id trong các mảng con, đây là giải pháp:

Mã:( 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. Rails:Buộc chuỗi rỗng thành NULL trong cơ sở dữ liệu

  2. Hướng dẫn CRUD đơn giản về Play Framework và MySQL bằng Ebean?

  3. Ngày không lưu trong Mysql từ Biểu mẫu đăng ký Php

  4. Ràng buộc DUY NHẤT, chỉ khi một trường chứa một giá trị cụ thể

  5. Tôi đã nhận được mã này, nó đang hoạt động tốt nhưng tôi muốn thay đổi mã có thành cấu trúc khác