Как отобразить данные вложенного массива в блейде laravel?

#arrays #laravel #loops #nested #laravel-blade

#массивы #laravel #циклы #вложенный #laravel-blade

Вопрос:

Как я могу получить доступ к данным вложенного массива в файле блейда laravel?

Мой массив:

 {
      "id": 2271,
      "amt_item": "PS839137",
      "image_name": "PS839137.jpg",
      "company": "01",
      "division": "PAP",
      "color_description": "VINTAGE SAGE",
      "item_description": "SHT SLV CRISSCROSS TEE",
      "season_code": "SP18",
      "season_name": null,
      "season_description": null,
      "wholesale_price": ".00",
      "retail_price": ".00",
      "color_code": "VINSA",
      "vendor_code": "DDJJG",
      "vendor_desc": "JIANGYIN CITY JINGE GARMENT COMPANY",
      "color_size_grid": {
        "CORA": {
          "1": {
            "size_description": "X SMALL",
            "on_hand": "0"
          },
          "3": {
            "size_description": "MEDIUM",
            "on_hand": "0"
          },
          "5": {
            "size_description": "X LARGE",
            "on_hand": "0"
          },
          "4": {
            "size_description": "LARGE",
            "on_hand": "0"
          },
          "2": {
            "size_description": "SMALL",
            "on_hand": "0"
          }
        },
        "CHA": {
          "3": {
            "size_description": "MEDIUM",
            "on_hand": "0"
          },
          "4": {
            "size_description": "LARGE",
            "on_hand": "0"
          },
          "1": {
            "size_description": "X SMALL",
            "on_hand": "0"
          },
          "5": {
            "size_description": "X LARGE",
            "on_hand": "0"
          },
          "2": {
            "size_description": "SMALL",
            "on_hand": "0"
          }
        },
        "VINSA": {
          "5": {
            "size_description": "X LARGE",
            "on_hand": "0"
          },
          "3": {
            "size_description": "MEDIUM",
            "on_hand": "0"
          },
          "4": {
            "size_description": "LARGE",
            "on_hand": "0"
          },
          "2": {
            "size_description": "SMALL",
            "on_hand": "0"
          },
          "1": {
            "size_description": "X SMALL",
            "on_hand": "0"
          }
        },
        "VINDE": {
          "5": {
            "size_description": "X LARGE",
            "on_hand": "0"
          },
          "4": {
            "size_description": "LARGE",
            "on_hand": "0"
          },
          "1": {
            "size_description": "X SMALL",
            "on_hand": "0"
          },
          "3": {
            "size_description": "MEDIUM",
            "on_hand": "0"
          },
          "2": {
            "size_description": "SMALL",
            "on_hand": "0"
          }
        }
      }
    }
  

Я передаю этот массив в свой файл блейда laravel в виде элементов и получаю доступ к связанным данным. Но мне сложно получить доступ к данным внутри массива color_size_grid. Как я могу напечатать все size_description внутри цикла foreach? Заранее спасибо.

Что я делаю в моем блейд-файле:

 @foreach ($items as $item)
        <div class="print-block" style="page-break-inside: avoid;">
            <div class="print-block__img">
                <img src="" alt="">
            </div>
            <div class="print-block__details">
                <h3>{{$item['item_description']}}</h3>
                <div class="code">{{$item['amt_item']}}</div>
                <div class="price">
                    <strong>W:</strong> USD {{$item['wholesale_price']}} | <strong>R:</strong> USD {{$item['retail_price']}}
                </div>
                <table class="other-info">
                    <tr>
                        <td>
                            <strong>Sizes: </strong>
                        </td>
                        <td></td>
                    </tr>
                    <tr>
                        <td>
                            <strong>Colors: </strong>
                        </td>
                        <td></td>
                    </tr>
                </table>
            </div>
        </div>
    @endforeach
  

Что касается размеров, теперь я хочу напечатать все size_descriptions внутри массива color_size_grid.

Для каждого цвета доступны размеры, как показано ниже:

 Sizes:
CORA - X SMALL, MEDIUM, X LARGE, LARGE, SMALL
CHA - ...........
  

Ответ №1:

 @foreach ($items as $item)
    <div class="print-block" style="page-break-inside: avoid;">
        <div class="print-block__img">
            <img src="" alt="">
        </div>
        <div class="print-block__details">
            <h3>{{ $item['item_description'] }}</h3>
            <div class="code">{{ $item['amt_item'] }}</div>
            <div class="price">
                <strong>W:</strong> USD {{ $item['wholesale_price'] }} | <strong>R:</strong> USD {{ $item['retail_price'] }}
            </div>
            <table class="other-info">
                <tr>
                    <td>
                        <strong>
                            Sizes: 
                            <?php
                                $uniqueSizes = [];
                            ?>
                            @foreach ($item['color_size_grid'] as $color => $sizes)
                                @foreach ($sizes as $size)
                                    @if (isset($uniqueSizes[$size['size_description']]))
                                        @continue
                                    @endif
                                    {{ $size['size_description'] }}
                                    {{ ($loop->last ? '' : ',') }}
                                    <?php
                                        $uniqueSizes[$size['size_description']] = true;
                                    ?>
                                @endforeach
                            @endforeach
                        </strong>
                    </td>
                    <td></td>
                </tr>
                <tr>
                    <td>
                        <strong>
                            Colors: 
                            @foreach ($item['color_size_grid'] as $color => $sizes)
                                {{ $color }}: 
                                @foreach ($sizes as $size)
                                    {{ $size['size_description'] }}
                                    {{ ($loop->last ? '' : ',') }}
                                @endforeach
                            @endforeach
                         </strong>
                    </td>
                    <td></td>
                </tr>
            </table>
        </div>
    </div>
@endforeach
  

Комментарии:

1. спасибо за этот ответ. но я получаю сообщение об ошибке, подобное этому здесь: «Пытаюсь получить свойство ‘color_size_grid’ не-объекта

2. не могли бы вы привести мне пример, пожалуйста, поскольку я новичок в laravel

3. Я изменил его в ответе

4. да, теперь это работает, большое вам спасибо :), могу ли я изменить его, чтобы отображать размеры для каждого цвета?

5. отлично, да, вы можете изменять все, что захотите 😉