2013-07-14 2 views
-1

Как я могу найти последнее сообщение и НЕ положить <hr> под ним?Найти последнюю строку в запросе foreach

<?php foreach($db->query("SELECT * FROM news") as $row): ?> 
<div class="NewsHeadline"> 
<div class="NewsDate"><?php echo $date; ?> - </div> 
<div class="NewsTitle"><?php echo $title; ?></div> 
</div> 

<div class="NewsBody"> 
<?php echo $body; ?> 
</div> 

<hr> 
<?php endforeach ?> 
+1

И ... что вы пробовали? –

+0

Если вы хотите только последнюю запись, измените свой запрос с помощью предложения ORDER BY и LIMIT –

+1

. Если вы хотите, чтобы после каждой записи, но последней, вы хотите «


»; переверните логику и положите '
' __before__ каждую запись __except__ первый –

ответ

2

Установить счетчик, равный 1 которой выполняется последовательное приращение в каждом раунде, и проверить, если он равен count() массива запроса $ возвращается. Если да, то вы в последнем туре!

<?php 
    $counter = 1; 
    $total = count($db->query("SELECT * FROM news")); 
?> 
<?php foreach($db->query("SELECT * FROM news") as $row): ?> 
    <div class="NewsHeadline"> 
     <div class="NewsDate"><?php echo $date; ?> - </div> 
     <div class="NewsTitle"><?php echo $title; ?></div> 
    </div> 

    <div class="NewsBody"> 
     <?php echo $body; ?> 
    </div> 
    <?php if($counter != $total){ 
    ?> 
     <hr> 
    <?php 
    } 

    ?> 

<?php $counter++; ?> 
<?php endforeach ?> 
1

Вы можете конвертировать в обычный for цикла, а затем сравнить $ я до размера вашего результата запроса:

<?php 
    $news = $db->query("SELECT * FROM news"); 

    for($i=0; $i<sizeof($news);$i++){ ?> 
     <div class="NewsHeadline"> 
      <div class="NewsDate"><?php echo $date; ?> - </div> 
      <div class="NewsTitle"><?php echo $title; ?></div> 
     </div> 

     <div class="NewsBody"> 
      <?php echo $body; ?> 
     </div> 

     <?php if(($i+1) < sizeof($news)) echo '<hr>'; ?> 
<?php } ?> 
2

решение было бы построить массив, а затем использовать join:

<?php 
$arr=array(); 
foreach($db->query("SELECT * FROM news") as $row): 
    $arr[] = '<div class="NewsHeadline"><div class="NewsDate">'.$date 
     .' - </div><div class="NewsTitle">'.$title' 
     .</div></div><div class="NewsBody">'.$body.'</div>'; 
endforeach 
echo join("<hr>",$arr);  
?> 
0

Если вы получили подсчет строк до цикла, вы можете проверить количество и не добавлять HR.

$rows = $db->query("SELECT * FROM news"); 
$row_count = $rows.count(); 
$iter = 0; 
foreach($rows as $row) 
{ 
    //... 
    if ($iter < $row_count) 
    { 
     // render hr 
    } 
    $iter++; 
} 

Вы могли бы также пойти с чистым CSS подходом:

div.containerClass:last-child hr { display:none; } 

где «containerClass» будет любой элемент, который ваш код размещен сидит внутри.

+0

FYI: непроверенный псевдокод там. –

+0

@ В примере с Богом, которым я доверяю, PHP, где мой нет (неправильное использование count()) –

Смежные вопросы