2017-03-12 13 views
0

Diese beiden Codezeilen sind speziell - ($ teamproject als $ teamproject) und ($ cattypes als $ teamproject). Im Grunde ist es eine Bildkarte, die die Kategorie (Cattypen) und das Hauptbild sowie den Titel der jeweiligen Bildkarte anzeigt.Wie kann man zwei Bedingungen an einer foreach-Schleife kombinieren, so dass sie sich nicht überschneiden?

<div class="container" id="projectcards"> 
    <div class="row"> 
    <?php  

if(!empty($error)){ 
     echo $error; 
     } 
if (!empty($teamproject)) { 
foreach ($teamproject as $teamproject): ?> 

     <a href="/project-single/1" class="col-md-6 col-sm-6 col-xs-12 thumbnailx"> 
      <?php foreach ($cattypes as $teamproject): ?> 
      <h4 class="post-content"><?= h($teamproject->cattype_title)?></h4> 
      <?php endforeach; ?> 
      <img src="<?= h($teamproject->mainimg)?>"> 
      <h3><?= h($teamproject->title)?></h3> 
     </a> 

    <?php 
    endforeach; 
     } 
    ?> 

    </div> 

</div> 

Antwort

1

Sie missverstehen, wie foreach in PHP funktioniert. Das erste Element sollte der Name eines Arrays sein, über das es iteriert, und das zweite Element, mit dem Sie jedes Element aufrufen möchten. Diese Aussage:

foreach ($teamproject as $teamproject): 

Sollte nicht die gleiche Variable zweimal auflisten.

Wenn es nur eine einzige Entität ist, iterieren Sie nicht über sie, sondern greifen Sie direkt auf ihre Werte zu.

Wenn es ein Array ist eine Liste von Teamproject Einheiten enthält, dann geben Sie einfach das Element einen eindeutigen Namen für die foreach-Schleife:

foreach ($teamproject as $project) 

Die zweite verschachtelte foreach- wenn dies soll eine Liste von Headern sein Für jedes spezifische Teamprojekt sollte es wahrscheinlich eine Liste innerhalb der einzelnen $ Projekteinheit geben? Wie Sie es geschrieben haben, iteriert es einfach über $ cattypes array und druckt bei jeder Iteration den gleichen $ -Projekttitel immer wieder.

Wenn cattypes soll eine Liste für jedes $ Projekt, dann ist es etwas vage entlang der Linien von:

foreach($project->cattypes as $cattype) 

austauschen „cattypes“ mit dem, was immer diese Liste auf Ihrer teamproject Entität genannt wird eigentlich.

+0

Ich verstehe, aber ist es eine Möglichkeit, die beiden foreach Aussagen zusammen eher zu kombinieren, als halten es getrennt wie im Beispiel gezeigt? –

+0

Ich müsste Ihren Controller-Code und Tabellencode genauer sehen, aber möglicherweise – ahoffner

+0

Habe es sortiert, Danke. Ich musste eine IF-Bedingung innerhalb der Foreach hinzufügen. –

0

Anstatt foreach Bedingungen hinzuzufügen, musste ich eine IF Bedingungen hinzufügen, um es zum Laufen zu bringen.

<div class="container" id="projectcards"> 
    <div class="row"> 
     <?php  
     if (!empty($teamproject)) { 
     foreach ($teamproject as $team): ?> 

     <a href="/projects-single/<?= h($team->id)?>" class="col-md-6 col-sm-6 col-xs-12 thumbnailx"> 
      <?php foreach ($cattypes as $cattype): 
       if ($team->cattype_id == $cattype->id) {        
       ?> 
       <h4 class="post-content"><?= h($cattype->title)?></h4> 
       <?php 
      } endforeach; ?> 

      <img src="<?= h($team->mainimg)?>"> 
      <h3><?= h($team->title)?></h3> 
     </a> 
     <?php 
     endforeach; 
    } 
    ?> 
</div> 

+1

Just FYI, wenn teamproject eine cattype_id hat, listet es einfach als eine Assoziation in der Table-Klasse auf und fügt in find call ein contain hinzu https://book.cakephp.org/3.0/en/orm/retrieving-data-and- resultsets.html # eager-loading-associations-via-contain – ahoffner

+0

Ja verstanden. Vielen Dank. –

Verwandte Themen