Как посчитать сумму вложенного foreach в первом ряду в лезвии ларавеллы? - PullRequest
1 голос
/ 25 сентября 2019

Мой набор данных и кодировка перечислены ниже.

[  
   {  
      "color":[  
         {  
            "id":1,
            "color":"yellow"
         },
         {  
            "id":2,
            "color":"red"
         }
      ]
   },
   {  
      "color":[  
         {  
            "id":3,
            "color":"blue"
         },
         {  
            "id":4,
            "color":"green"
         }
      ]
   }
]

@foreach ($items as $item)
    @foreach($item->color as $color)
       <p>{{$color->color}}</p>
    @endforeach
@endforeach

Что я хочу:

желтый 1/4

красный 2/4

синий 3/4

зеленый 4/4

Как подсчитать сумму в каждой строке?

Ответы [ 3 ]

0 голосов
/ 25 сентября 2019

вы можете You Laravel метод подсчета коллекции

$collection = collect([1, 2, 3, 4]);

$collection->count();

, например, для получения дополнительной информации перейдите по этой ссылке: https://laravel.com/docs/5.8/collections#method-count

0 голосов
/ 25 сентября 2019

Я создал аналогичный код JSON, чтобы показать вам, как заставить его работать.

[{"id":1,"color":"blue"},{"id":2,"color":"red"},{"id":3,"color":"red"},{"id":4,"color":"green"},{"id":5,"color":"red"},{"id":6,"color":"blue"}]
    $colors = Color::all(); // Model contains 6 random colors
    $countAllColors = count($colors);
    $colorNames = $colors->countBy('color');
    foreach ($colorNames->all() as $key => $value) {
        $values = $key . $value . '/' . $countAllColors . "\n";
        echo $values; // output will be: blue2/6 red3/6 green1/6
    }

вы могли заметить, что я использую метод countby , чтобы посмотреть, сколько у нас повторного цвета item in the array.

однако, еслиВы хотите сделать это в шаблоне blade, просто скопируйте приведенный ниже код и вставьте его в свой шаблон лезвия

@php
 $colors = '[{"id":1,"color":"blue"},{"id":2,"color":"red"},{"id":3,"color":"red"},{"id":4,"color":"green"},{"id":5,"color":"red"},{"id":6,"color":"blue"}]';
 $colors = json_decode($colors, true);
 $colors = collect($colors);
 $countAllColors = count($colors);
 $colorNames = $colors->countBy('color');
@endphp

<div>
    @foreach ($colorNames->all() as $key => $value)
       <b> {{ $key . $value . '/' . $countAllColors .'   ' }} </b> <br>
    @endforeach
</div>

output

blue2 / 6 red3 / 6 green1 / 6

для решения проблемы вложенности, вы можете взглянуть на этот метод pulck .

Надеюсь, вы найдете его полезным

0 голосов
/ 25 сентября 2019

Сначала вам нужно взять массив:

@php
    $color_counts = array();
@endphp

Чем для цикла вы можете считать цвета @ foreach ($ items как $ item)

 @foreach($item->color as $color)
      @php
        if(isset($color_counts[$color->color]) && $color_counts[$color->color]!=null){
          $color_counts[$color->color]['count'] += 1;
        }
        else {
          $color_counts[$color->color]['count'] = 1;
          $color_counts[$color->color]['color_name'] = $color->color;
        }
      @endphp
    @endforeach
@endforeach

Теперь вы можете получитьцвета и его количество в массиве $color_counts.

Примечание: Вы можете сделать это в контроллере и передать его для просмотра

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