2016-07-29 12 views
1

My foreach Schleife Ausgänge nur 1 Ergebnis. was ich versuche zu tun ist 3 Ergebnisse aus foreach-Schleife ausgeben dann im Wesentlichen brechen/stoppen Sie die Schleife.Für jede Schleife gibt nur 1 Ergebnis aus; Versuchen, 3 Ergebnisse im Array auszugeben, dann stoppen Sie die Schleife

<?php $i=0; foreach($feature_event as $event): $i++ ?> 
     <?php if($event["end"] >= $now && $i==3): ?> 
       ... CODE HERE ... 
     <?php endif; ?> 
    <?php endforeach;?> 

UPDATE Array und Jetzt Variable

<?php 
$now = strtotime("now"); 

$feature_event = array(

    array(
     "title"  => "Cincinnati Music Festival", 
     "date"  => "July 22-24, 2016", 
     "end"  => strtotime("July 24, 2016"), 

    ), 
    array(
     "title"  => "Essence Festival", 
     "date"  => "June 30 - July 2, 2017", 
     "end"  => strtotime("July 2, 2017"), 

    ), 
    array(
     "title"  => "Magic City Classic", 
     "date"  => "October 28 - 30 2016", 
     "end"  => strtotime("October 30, 2016"), 

    ), 
    array(
     "title"  => "NBA All-Star Weekend", 
     "date"  => "February 17-19, 2017", 
     "end"  => strtotime("February 19, 2017"), 

    ), 
    array(
     "title"  => "Party Gras Cruise", 
     "date"  => "August 18-20, 2016", 
     "end"  => strtotime("August 20, 2016"), 
    ) 

    array_multisort(array_column($feature_event, 'end'), $feature_event); 
    ?> 

vergessen haben, das Array

+0

Können Sie etwas Code hinzufügen, um zu zeigen, die ersten paar Einträge aus dem '$ feature_event' Array, und der Wert des bekommen '$ now' Variable? –

+0

Und wenn '$ event [" end "]> = $ now ', sollte die Schleife stoppen, auch wenn 3 Ergebnisse noch nicht ausgegeben wurden? –

+0

die Art, wie ich es ursprünglich hatte, ich hatte keinen Zähler oder Inkrementierer, so dass es alle Ergebnisse in Array ausgegeben. was ich tun möchte, ist die Ergebnisse, die weniger als die "jetzt" angezeigt werden, aber nur die 3 frühesten Ergebnisse .... –

Antwort

0

Dies scheinen die Ergebnisse, die ich war auf der Suche nach ...

<?php $i=0; foreach($feature_event as $event): if ($i == 3) break; ?> 
    <?php if($event["end"] > $now): $i++; ?> 
       <div class="event box-fade hvr-float"> 
        <a href="<?php echo $event["link"]; ?>" title="<?php echo $event["title"]; ?>"> 
         <img src="<?php echo $event["img"]; ?>" /> 
        </a> 
        <h4><?php echo $event["title"]; ?></h4> 
        <p><i class="fa fa-calendar"></i> <?php echo $event["date"]; ?></p> 
        <p><a class="learnmore" href="<?php echo $event["link"]; ?>" title="Learn more about <?php echo $event["title"]; ?>">Learn More</a></p> 
       </div> 
    <?php endif; ?> 
<?php endforeach;?> 
0

Ändern Sie diese Zeile

<?php if($event["end"] >= $now && $i==3): ?> 

Multisort hinzufügen zu

<?php if($event["end"] >= $now): if ($i == 3) break; ?> 
0

Dieser Code wird die ersten drei Ereignisse wiedergeben, die noch in der Zukunft sind.

$i = 0; 

foreach ($feature_event as $event) { 
    if ($i == 3) break; 

    if ($event['end'] >= $now) { 
     $i++; 
     echo $event['title'] . '<br>'; 
     // ... 
    } 
} 
0

Die Art und Weise Sie es mit if($event["end"] >= $now && $i==3) geschrieben haben, es wird nur ausgegeben, wenn $i==3, und das wird auf einer Iteration nur der Schleife passieren.

Ich würde vorschlagen: Schleife über eine Scheibe der ersten drei Elemente aus dem Array (nach dem Sortieren). Auf diese Weise erhalten Sie maximal drei Ereignisse.

foreach (array_slice($feature_event, 0, 3) as $event) { 
    if ($event["end"] >= $now) break; 
    // your other code 
} 

Sie können die Schleife am Tag Vergleichsbedingung brechen, aber wenn Sie wirklich strtotime("now") vergleichen, denken Sie daran, dass Sie nur vergangene Ereignisse bekommen. Ich nehme an, das ist was du willst, wollte es aber nur wiederholen, denn basierend auf dem von dir zur Verfügung gestellten Beispiel würde auch mit diesem Code nur ein Item ausgegeben werden, da nur eines dieser Items mit der Date-Bedingung übereinstimmt.

0

Dadurch wird Ihr Code 3 Datensätze ausgeben (natürlich, if $event["end"] >= $now ist wahr für mindestens 3 Datensätze), aber Sie sollten nach besseren Lösungen suchen.

<?php $i=0; foreach($feature_event as $event): ?> 
     <?php if(($event["end"] >= $now) && ($i<3)): ?> 
       ... CODE HERE ... 
     <?php endif; ?> 

    <?php $i++; endforeach;?> 

Wenn Ihr $ feature_event eine Sammlung von Datenbankabfragen ist, fügen Sie eine where- und limit-Klausel hinzu.

$query = "SELECT col1, col2, col3 FROM `events` WHERE 'end' > CURDATE() LIMIT 3" 

Auf diese Weise können nicht zusätzliche $i Zähler in Ihrer Iteration verwenden müssen.

Oder, wenn Sie mit Ihrer Ergebnismenge bleiben möchten, verwenden Sie einfach for-Schleife.

<?php for($i=0; $i<3; $++); ?> 
    <?php if($event["end"] >= $now): ?> 
    <p><?= $featured_event[i]['some_index'] ?></p> 
    <?php endif; ?> 
<?endfor; ?>