Tìm kiếm vòng lặp JSON JSON

Nhưng tôi muốn đầu ra ở định dạng bên dưới sử dụng nhiều cho mỗi vòng lặp. đối với danh mục->danh mục con->sản phẩm, sản phẩm sẽ là một chương trình dựa trên danh mục con

  {
  "category_id": "1",
  "category_name": "Dry Cleaning",
  "category_image_url": "",
"subcategory": [
  {
    "subcategory_id": "4",
    "subcategory_name": "Men",
    "vendor_products_details": [
      {
    "product_id": "19",
    "product_name": "T Shirt",
    "Price": "20"
  },
  {
    "product_id": "20",
    "product_name": "Top",
    "Price": "15"
  }
    ]
  },
  {
    "subcategory_id": "5",
    "subcategory_name": "Women",
    "vendor_products_details": [
      {
    "product_id": "18",
    "product_name": "T shirt",
    "Price": "15"
  },
  {
    "product_id": "9",
    "product_name": "Bedsheet",
    "Price": "15"
  }
    ]
  }


   ]

  },

Trên thực tế, đầu ra sẽ dựa trên danh mục, danh mục con dựa trên danh mục và sản phẩm dựa trên danh mục con trong đối tượng json

Tôi quay lại cuộc thảo luận trước đó mà James_Hibbard và tôi đã có về sự khác biệt giữa Đối tượng Javascript và JSON

Dấu phẩy lơ lửng của bạn [ở cuối đối tượng 'vị trí'] và các số có nhiều hơn 1 0 ở phía trước dấu thập phân, là JSON không hợp lệ. [“00” không phải là số hợp lệ. Nó sẽ hoạt động như một chuỗi, mặc dù. ]

Vòng lặp foreach chỉ hoạt động trên mảng và được sử dụng để lặp qua từng cặp khóa/giá trị trong một mảng

cú pháp

foreach [$mảng dưới dạng $value] {
mã được thực thi;
}

Đối với mỗi lần lặp lại, giá trị của phần tử mảng hiện tại được gán cho $value và con trỏ mảng được di chuyển một, cho đến khi nó chạm đến phần tử mảng cuối cùng

Vì định dạng JSON là định dạng dựa trên văn bản, nó có thể dễ dàng được gửi đến và từ máy chủ và được sử dụng làm định dạng dữ liệu bởi bất kỳ ngôn ngữ lập trình nào

PHP có một số chức năng tích hợp để xử lý JSON

Đầu tiên, chúng ta sẽ xem xét hai chức năng sau

  • json_encode[]
  • json_decode[]

PHP - json_encode[]

Hàm json_encode[] dùng để mã hóa một giá trị sang định dạng JSON

Ví dụ

Ví dụ này cho thấy cách mã hóa một mảng kết hợp thành một đối tượng JSON

$age = array["Peter"=>35, "Ben"=>37, "Joe"=>43];

tiếng vang json_encode[$age];
?>

Chạy ví dụ »

Ví dụ

Ví dụ này cho thấy cách mã hóa một mảng được lập chỉ mục thành một mảng JSON

$cars = array["Volvo", "BMW", "Toyota"];

tiếng vang json_encode[$cars];
?>

Chạy ví dụ »

PHP - json_decode[]

Hàm json_decode[] được sử dụng để giải mã một đối tượng JSON thành một đối tượng PHP hoặc một mảng kết hợp

Ví dụ

Ví dụ này giải mã dữ liệu JSON thành một đối tượng PHP

$jsonobj = '{"Peter". 35"Bến". 37"Joe". 43}';

var_dump[json_decode[$jsonobj]];
?>

Chạy ví dụ »

Hàm json_decode[] trả về một đối tượng theo mặc định. Hàm json_decode[] có tham số thứ hai và khi được đặt thành true, các đối tượng JSON được giải mã thành các mảng kết hợp

Ví dụ

Ví dụ này giải mã dữ liệu JSON thành một mảng kết hợp PHP

$jsonobj = '{"Peter". 35"Bến". 37"Joe". 43}';

var_dump[json_decode[$jsonobj, true]];
?>

Chạy ví dụ »

PHP - Truy cập các giá trị được giải mã

Dưới đây là hai ví dụ về cách truy cập các giá trị được giải mã từ một đối tượng và từ một mảng kết hợp

Đoạn mã. Phương pháp ưa thích để lặp qua một mảng JSON đa chiều bằng cách sử dụng đệ quy và vòng lặp foreach với PHP & GeoJSON

//Fetches the GeoJSON array.
$geojson = file_get_contents["sampleGeoJSON.json",false];
 
//Converts GeoJSON into an associative array.
$geojson_array = json_decode[$geojson,true];


//A recursive function to traverse the GeoJSON array.
function traverseGeoJSON[$iterator] {
    
    //If there is a property left.
    while [ $iterator -> valid[] ] {

        if[$iterator->hasChildren[]] 
            traverseGeoJSON[$iterator -> getChildren[]];

        elseif[$iterator->key[] === "name"]
            echo $iterator->current[].PHP_EOL;
 
        //Jump to next property.
        $iterator -> next[];
        
    } 
}

foreach[$geojson_array as $location]
{
    //Defines iterator for each location.
    $iterator = new RecursiveArrayIterator[$location];
    //Call traversestructure to parse the GeoJSON.
    traverseGeoJSON[$iterator];
}

/*
OUTPUT
fortune island
Dinagat Islands
*/

Đó không phải là tất cả. Bài viết cũng bao gồm các cách khác để thực hiện công việc dự định và cũng là một ví dụ về PHP GeoJSON. Hãy theo dõi để tìm hiểu thêm.

Mảng đa chiều GeoJSON trong PHP

GeoJSON là một định dạng JSON để chỉ định các đối tượng địa lý và các thuộc tính phi không gian của chúng. Có vô số thuộc tính như tọa độ, hình dạng và hình học. GeoJSON là một cấu trúc dữ liệu cần thiết cho nhiều ứng dụng dựa trên GIS

GeoJSON là một phần mở rộng của JSON bình thường

Mặc dù thực tế là chúng có thể phức tạp để diễn giải, nhưng xét cho cùng, chúng là một phần mở rộng của JSON. Vì vậy, chúng ta có thể lặp qua nó trong PHP bằng cách sử dụng các kỹ thuật tương tự mà chúng ta đã thấy trong các ví dụ trước. Hãy xem một GeoJSON mẫu

{
{
  "type": "Feature",
  "geometry": {
    "type": "Point",
    "coordinates": [20, 10]
  },
  "properties": {
    "name": "fortune island"
  }
},
{
  "type": "Feature",
  "geometry": {
    "type": "Point",
    "coordinates": [125.6, 10.1]
  },
  "properties": {
    "name": "Dinagat Islands"
  }
}
}

GeoJSON này khá đơn giản và đặc biệt được chọn cho mục đích trình diễn. Ở đó chúng tôi có một vài địa điểm và tọa độ của chúng. Trạng thái kết thúc mong muốn phải như sau

[LocationName]...

Về cơ bản, chỉ tên địa điểm. Vì vậy, điều đó chỉ có thể xảy ra nếu PHP có thể lặp lại GeoJSON theo cách đệ quy và trích xuất biểu mẫu mong muốn ra khỏi nó

Vòng lặp đệ quy PHP thông qua một mảng đa chiều

Chúng tôi đề xuất 2 bước để tạo vòng lặp đệ quy PHP thông qua mảng nhiều chiều. Đầu tiên, tạo một chức năng tùy chỉnh có thể gọi chính nó để đệ quy. Hàm phải chấp nhận một lớp RecursiveArrayIterator làm tham số duy nhất của nó. Thứ hai, tạo một RecursiveArrayIterator với mảng JSON json_decoded của bạn

//Fetches the GeoJSON array.
$geojson = file_get_contents["sampleGeoJSON.json",false];
 
//Converts GeoJSON into an associative array.
$geojson_array = json_decode[$geojson,true];


//A recursive function to traverse the GeoJSON array.
function traverseGeoJSON[$iterator] {
    
    //If there is a property left.
    while [ $iterator -> valid[] ] {

        if[$iterator->hasChildren[]] 
            traverseGeoJSON[$iterator -> getChildren[]];

        elseif[$iterator->key[] === "name"]
            echo $iterator->current[].PHP_EOL;
 
        //Jump to next property.
        $iterator -> next[];
        
    } 
}

foreach[$geojson_array as $location]
{
    //Defines iterator for each location.
    $iterator = new RecursiveArrayIterator[$location];
    //Call traversestructure to parse the GeoJSON.
    traverseGeoJSON[$iterator];
}

/*
OUTPUT
fortune island
Dinagat Islands
*/

Tệp GeoJSON khá phức tạp nhưng với cách tiếp cận phù hợp, chúng tôi có thể trích xuất đúng thông tin

Nội dung liên quan. JSON với PHP

Bài đọc liên quan về Mảng đa chiều PHP

  • Cách chuyển đổi mảng đa chiều PHP sang CSV bằng fputcsv
  • Làm cách nào để sắp xếp một mảng nhiều chiều theo giá trị?
  • Cách đẩy phần tử trong mảng nhiều chiều trong PHP
  • Cách chia mảng nhiều chiều trong PHP
  • Xóa các phần tử khỏi mảng kết hợp, đa chiều hoặc bất kỳ mảng nào trong PHP
  • Cách tìm giá trị trong mảng đa chiều PHP
  • Cách đếm giá trị trong mảng đa chiều PHP
  • Cách lọc mảng đa chiều PHP theo giá trị
  • Cách sử dụng PHP array_values ​​trong mảng đa chiều

Nếu bạn dự định trở thành nhà phát triển, bạn sẽ phải làm việc với các phản hồi JSON khá thường xuyên. Lý do là hầu hết các ứng dụng lấy dữ liệu từ máy chủ ở dạng JSON, bao gồm cả ứng dụng đơn giản mà chúng ta sẽ thấy trong bài viết này

Đó là lý do tại sao lặp qua hoặc phân tích cú pháp một mảng JSON bằng PHP là một phương pháp phổ biến trong quá trình phát triển. Trong bài viết này, chúng ta sẽ xem cách lặp qua một mảng JSON đa chiều bằng PHP. Chúng ta sẽ thấy một cách phức tạp hơn để lặp lại đa chiều và khám phá lý do tại sao người ta thường khuyên nên đi theo con đường khó khăn

Kịch bản vòng lặp PHP mảng JSON đa chiều khác

Bối cảnh & Thiết lập. Dữ liệu khách sạn trong một mảng JSON đa chiều

Chúng tôi sẽ phát triển một ứng dụng dựa trên bảng điều khiển để phân tích cú pháp một mảng JSON và in thông tin của các khách sạn ra bảng điều khiển. Ứng dụng này đơn giản nhưng đủ mạnh để thể hiện khái niệm. Bạn có thể thấy mình đang mã hóa một ứng dụng sẽ phân tích cú pháp phản hồi JSON và hiển thị thông tin này trên một trang web thông tin khách sạn phức tạp vào một thời điểm nào đó trong sự nghiệp của bạn

Giả sử rằng chúng tôi có phản hồi JSON với thông tin khách sạn

{
    "0" : {
        "HotelName" : "North Star Hotel",
        "HotelLocation" : "Northern City",
        "NearbyLocations":
        {
            "Airport": "Northern Airport",
    
            "Railway": "Northern Railway"
          
 
        },
        "RoomRate":
        {
            "PerNight": "120",
            "Tax": "15",
            "CurrencyCode": "USD"
 
        }
    },
 
 
    "1" : {
        "HotelName" : "South Star Hotel",
        "HotelLocation" : "Southern City",
        "NearbyLocations":
        {
            "Airport": "Southern Airport",
           
            "Railway": "Southern Railway"
            
 
        },
        "RoomRate":
        {
            "PerNight": "150",
            "Tax": "20",
            "CurrencyCode": "USD"
 
        }
    },
 
    "2" : {
        "HotelName" : "East Star Hotel",
        "HotelLocation" : "Eastern City",
        "NearbyLocations":
        {
            "Airport": "Eastern Airport",
          
            "Railway": "Eastern Railway"
            
 
        },
        "RoomRate":
        {
            "PerNight": "90",
            "Tax": "10",
            "CurrencyCode": "USD"
 
        }
    },
 
    "3" : {
        "HotelName" : "West Star Hotel",
        "HotelLocation" : "Western City",
        "NearbyLocations":
        {
            "Airport": "Western Airport",
 
            
            "Railway": "Western Railway"
            
 
        },
        "RoomRate":
        {
            "PerNight": "160",
            "Tax": "30",
            "CurrencyCode": "USD"
 
        }
    }
 
}

json_decode mảng đa chiều JSON của bạn thành một mảng PHP

Bạn nên chuyển một giá trị boolean true vào json_decode khi bạn muốn giải mã một mảng nhiều chiều. Cờ boolean cho hàm biết rằng đầu ra phải là một hàm thay vì PHP StdClass. Mảng là đầu ra được ưu tiên nên ít có cơ hội ghi đè dữ liệu hơn

Độ sâu của cây cho thấy mức độ phức tạp của JSON. Trong trường hợp này, cây chỉ sâu ba cấp độ. Vì cấu trúc JSON đơn giản nên chúng ta có thể sử dụng các vòng lặp foreach lồng nhau để lặp qua mảng JSON PHP. Hãy xem làm thế nào

Tùy chọn 1 – Lặp qua một mảng JSON đa chiều với PHP bằng cách sử dụng Vòng lặp lồng nhau

Vì vậy, chúng ta sẽ sử dụng các vòng lặp foreach lồng nhau để lặp qua mảng JSON. Nhưng điều đầu tiên, chúng ta sẽ chuyển đổi JSON thành một mảng. Chúng tôi đã thấy chuyển đổi JSON sang mảng trong một trong các bài viết của chúng tôi. Sau khi chuyển đổi, chúng tôi sẽ sử dụng các vòng lặp foreach lồng nhau để đào sâu vào mảng JSON PHP


Đây là đầu ra của mã

HotelName : North Star Hotel        
HotelLocation : Northern City       
Airport : Northern Airport
Railway : Northern Railway
PerNight : 120
Tax : 15
CurrencyCode : USD
====================================
HotelName : South Star Hotel        
HotelLocation : Southern City       
Airport : Southern Airport
Railway : Southern Railway
PerNight : 150
Tax : 20
CurrencyCode : USD
====================================
HotelName : East Star Hotel
HotelLocation : Eastern City
Airport : Eastern Airport
Railway : Eastern Railway
PerNight : 90
Tax : 10
CurrencyCode : USD
====================================
HotelName : West Star Hotel
HotelLocation : Western City
Airport : Western Airport
Railway : Western Railway
PerNight : 160
Tax : 30
CurrencyCode : USD
====================================

Chúng tôi đã lặp qua mảng JSON và in ra các thuộc tính của khách sạn. Bạn có thể sử dụng logic tương tự để lấy các thuộc tính này và hiển thị chúng khi bạn thấy phù hợp. Chúng tôi đã giữ logic hiển thị đơn giản để nhấn mạnh hơn vào các vòng lặp

Có ba vòng lặp lồng nhau để phân tích mảng kết hợp JSON này. Giả sử chúng ta có một JSON thậm chí còn phức tạp hơn và có chiều sâu hơn ba cấp độ. Bây giờ, bạn thấy chúng ta đang hướng tới đâu. Việc lồng vòng lặp sẽ tăng lên khi JSON trở nên phức tạp hơn.  

Mối quan tâm lớn nhất với các vòng lặp lồng nhau là độ phức tạp của mã tăng lên. Sự phức tạp có thể không rõ ràng ở đây, nhưng nó ảnh hưởng đến hiệu suất trong một ứng dụng quy mô lớn. Thứ hai, khả năng đọc mã bị ảnh hưởng đáng kể khi việc lồng nhau trở nên nghiêm trọng

May mắn thay, có một giải pháp mạnh mẽ cho vấn đề này. Giải pháp tuy phức tạp nhưng giúp chúng ta vượt qua nỗi lo về lồng nhau. Chúng ta sẽ thấy điều đó tiếp theo

Tùy chọn 2 – Lặp qua một mảng JSON đa chiều với PHP bằng cách sử dụng RecurisveArrayIterator

RecursiveArrayIterator là một iterator đặc biệt của PHP. PHP mô tả nó trong tài liệu, nhưng nó có thể gây khó hiểu. Vì vậy, hãy nói một cách đơn giản, RecursiveArrayIterator giúp lặp qua các mảng trong các mảng

Mảng trong mảng ngụ ý mối quan hệ cha-con và đó là lý do tại sao tài liệu sử dụng các thuật ngữ liên quan đến mối quan hệ này. Không có gì khó chịu, hãy kiểm tra mã

Chúng tôi sẽ sử dụng các chức năng của trình vòng lặp để triển khai logic giúp chúng tôi duyệt qua các cấu trúc JSON phức tạp một cách mạnh mẽ và hiệu quả. Các mô tả của các chức năng này có thể được nhìn thấy trong tài liệu

Chủ Đề