PHP JSON цикл через вложенные массивы с метками ARRAY [0], ARRAY [1] и т. Д. - PullRequest
0 голосов
/ 04 августа 2020

Мне отправляют зацикленное чтение о цикле по JSON массивам!

Я декодировал строку JSON. Он содержит заказы на пиццу и информацию о покупателях. Каждый заказ находится в массиве, первый называется Array [0], второй Array [1] и т.д. c. В каждом массиве есть [products], который содержит Array [0] с деталями первой пиццы, Array [1] с деталями второй et c.

Я не могу на всю жизнь выяснить, как получить доступ к значениям в массиве [products].

Внутри [products] одним из значений является сама строка JSON, но я пока не собираюсь беспокоиться об этом!

Print_R дает мне следующее:

Array [0] => Array ([order_number] => 568

    [products] => Array ( [0] => Array ( 
                  [item_no] => 1 
                  [item_name] => Full Veggie Pizza
                  [qty] => 2 
                  [woofood_meta] => {"original_price":"9.0"} )
                  
                  [1] => Array ( 
                  [item_no] => 2
                  [item_name] => Full Veggie Pizza 
                  [qty] => 1 
                  [woofood_meta] => {"extra_options":{"Extras": 
                                   [{"id":61,"price":"\u00a30.50",
                                  
                  "price_float":0.5,"category":"Extras","name":"Jalape\u00f1os",
                                     
                   "hide_prices":false}]},"extra_options_price":0.5,"original_price":"9.0"} )
                  
                  [2] => Array ( 
                  [item_no] => 3
                  [item_name] => Full Veggie Pizza 
                  [qty] => 1 
                  [woofood_meta] => {"extra_options":{"Extras": 
                                    [{"id":57,"price":"\u00a30.50",
                                      "price_float":0.5,"category":"Extras","name":"Extra 
                                        veg 1)","hide_prices":false},
                                      

{"id": 61, "price": "\ u00a30.50 "," price_float ": 0.5," category ":" Extras "," name ":" Jalape \ u00f1os "," hide_prices ": false}, {" id ": 62," price ":" \ u00a30 .00 "," price_float ": 0," category ":" Extras "," name ":" Chillies "," hide_prices ": false}]}," additional_comments ":" Ананас "," extra_options_price ": 1," original_price ":" 9.0 "})

                  [3] => Array ( 
                  [item_no] => 4 
                  [item_name] => Pepperoni Pizza 
                  [qty] => 1 
                  [woofood_meta] => {"original_price":"8.50"} )  
                  
                  [date_to_deliver] => 2020-07-25 00:00 
                  [time_to_deliver] => 19:00 
                  [full_name] => Freda People 
                  [address] => 22 New St 
                  [city] => Newtown
                  [postcode] => NT6 6NT 
                  [phone] => 07123 456 789 
                  [email] => freda@gmail.com 
                  [customer_note] => Beware of the dog )
                  

Array [1] => Array ([order_number] => 569 // Так начинается следующий набор массивов

Я могу вывести все сведения об имени и адресе, но ничего из массива [products].

Мой код:

                          $url = 'orders(1).json';
                          $jsonobj = file_get_contents($url);

                          $arr = json_decode($jsonobj, true);
            
         $element = $arr;
         
         foreach($arr as $element) {
             for($i=0;$i<count($element.products['$i']);$i++){
        echo $element ['order_number']; "<br>";
        echo $element ['products[$i].qty']; "<br>";
        echo $element ['products[$i].item_name']; "<br>";
        echo $element ['products[$i].woofood_meta.name']; "<br>";
        echo $element ['products[$i].woofood_meta.additional_comments']; "<br>";
        echo $element ['date_to_deliver']; "<br>";
        echo $element ['time_to_deliver']; "<br>";
        echo $element ['full_name']; "<br>";
                                 
                                                             } 
                                    } 

Массив из json по запросу:

[{"order_number": "573", "products": [{"item_no": 1, "item_name": "Неаполитанская пицца", "qty": "1", "woofood_meta": "{" original_price ":" 9,50 "}"}, {"item_no": 2, "item_name": "Маргарита Пицца "," qty ":" 1 "," woofood_meta ":" {"extra_options": {"Extras": [{"id": 59, "price": "\ u00a31.00", "price_float": 1, "category": "Extras", "name": "Extra сыр 1", "hide_prices": false}]}, "extra_options_price": 1, "original_price": "7.50"} "}, {" item_no ": 3 , "item_name": "Cheesy Garli c Bread (v)", "qty": "1", "woofood_meta": "{" original_price ":" 4.5 "}"}], "date_to_deliver": "2020- 07-31 00:00 »,« time_to_deliver »:« 19:00 »,« full_name »:« XXXX XXXX »,« address »:« ZZZZ ZZZZ »,« city »:« VVVVVVVV »,« почтовый индекс »:« 123 456 "," phone ":" 1234567890 "," email ":" xx@yy.com "," customer_note ":" мы все еще защищаем. Спасибо за вашу помощь "}

1 Ответ

1 голос
/ 04 августа 2020

Кажется, это недостаток знаний о работе с массивами, поэтому давайте сначала рассмотрим это.

$arr = [0, 1, 2];

Во-первых, массивы индексируются 0, что означает, что массив длиной 3 будет иметь индекс 0, 1, 2. Итак, чтобы получить доступ к первому фрагменту данных, мы хотели бы ввести индекс 0.

$arr[0] = 0;

Теперь часто с API и данными JSON будет то, что называется вложенным массивы:

$arr = [ 0, [ 1, 2 ] 3 ];

Итак, как нам теперь попасть во все элементы? Мы просто применяем тот же принцип: сначала обращаемся к начальному индексу, а затем получаем доступ к индексу данных, которые нам нужны. Пример:

$arr[1][0] = 1

Сначала мы переходим к индексу 1, который является нашим вложенным массивом: [1, 2], затем мы используем следующую скобку для индексации того фрагмента данных, который нам нужен.

1014

Я настоятельно рекомендую попрактиковаться в этом и освоить это, поскольку это всего лишь основная концепция программирования на большинстве языков. И примените это к своей текущей проблеме!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...