2017-10-19 5 views
0

Avec cet exemple, j'essaye de faire une boucle sur le tableau imbriqué et de générer les informations suivantes.Comment faire une boucle et afficher un tableau imbriqué dans Laravel

Collection {#252 ▼ #items: array:1 [▼ 
     0 => Collection {#258 ▼ 
      #items: array:4 [▼ 
      0 => array:3 [▼ 
       0 => "Stylish Hat" 
       1 => "Green" 
       2 => "2017-10-16 17:57:49" 
      ] 
      1 => array:3 [▼ 
       0 => "Stylish Hat" 
       1 => "Blue" 
       2 => "2017-10-16 17:57:49" 
      ] 
      2 => array:3 [▼ 
       0 => "Stylish Hat" 
       1 => "Red" 
       2 => "2017-10-16 18:00:24" 
      ] 
      3 => array:3 [▼ 
       0 => "Classic Hat" 
       1 => "Black" 
       2 => "2018-10-16 18:00:24" 
      ] 
      ] 
     } ] } 

CHIC HAT

Couleurs: Vert, Vente bleu, rouge

Date: 2017-10-16


CLASSIC HAT

Couleurs: Noir

Vente Date: 2018-10-16


J'ai essayé de diverses manières sans succès à la sortie donc je ne sais pas si mon code actuel est de toute valeur, mais voici mon coup de poignard dans le noir qui est bien sûr complètement faux ...

@foreach ($hatData->toArray() as $hatStyle => $color => $saleDate) 
     <div style="color:#333;font-size:14pt;"> 
      <b>{{ $hatStyle }}</b> 
     </div> 
     @foreach($colors as $color) 
      <div style="color:#333;font-size:10pt;"> 
       colors: {{ $color }} 
      </div> 
      <div> 
       Sale Date: {{ $saleDate }} 
      </div> 
     @endforeach 
     @endforeach 

Répondre

0

Si quelqu'un d'autre est aux prises avec la sortie d'un tableau imbriqué avec groupBy dans Laravel, la façon la plus propre de le faire est la suivante. La boucle principale est le champ groupBy et la boucle interne est le trait distinctif de chaque groupe. Ma collection a également été construite un peu différemment des exemples ci-dessus.

J'ai construit mon tableau en saisissant d'abord tous les enregistrements puis en les groupant par mon champ désiré en tant que tel.

 $mainCollection=records::where('this','=','that')->get();  

     $selected = $mainCollection->map(function ($item) { 
      return [ 
      'mainValue'=>$item->mainValue, 
      'itemOne' => $item->itemOne, 
      'itemTwo' => $item->itemTwo 
      ]; 
     }); 

     $mainLoop=$selected->groupBy('mainValue'); 

ensuite à la sortie I utilisé la boucle suivante

 @foreach ($mainLoop as $ml) 

     <div> 
      <u>{{ $ml[0]['mainValue'] }}</u> 
     </div> 

     @foreach($ml as $item) 
      <div> 
       {{$item['itemOne']}} - {{ $item['itemTwo'] }} 
      </div> 
     @endforeach 

     @endforeach 

Je ne sais pas si cela est trop abstrait pour aider quelqu'un d'autre, et peut-être son pas la meilleure façon possible, mais il m'a fallu un peu de chasse et reconstituer différentes choses que j'ai lues pour comprendre cela.

0

utilisation groupBy de la classe de collection comme ceci:

$collection = collect([ 
['account_id' => 'account-x10', 'product' => 'Chair'], 
['account_id' => 'account-x10', 'product' => 'Bookcase'], 
['account_id' => 'account-x11', 'product' => 'Desk'], 
]); 

$grouped = $collection->groupBy('account_id'); 

$grouped->toArray(); 

/* 
    [ 
     'account-x10' => [ 
      ['account_id' => 'account-x10', 'product' => 'Chair'], 
      ['account_id' => 'account-x10', 'product' => 'Bookcase'], 
     ], 
     'account-x11' => [ 
      ['account_id' => 'account-x11', 'product' => 'Desk'], 
     ], 
    ] 
*/ 

https://laravel.com/docs/5.5/collections#method-groupby

+0

Salut, je cherchais plus d'informations sur la façon de produire non seulement construire le tableau comme je l'ai déjà fait dans la question précédente que j'ai liée. Mais c'est toujours une aide car je n'étais pas au courant de la commande grouped-> toArray(). J'ai depuis compris la partie sortie moi-même, donc je ne sais pas comment fermer ou supprimer? – weekapaug