2012-05-16 40 views
2

我在這裏有一個foreach循環,它將數據庫中的圖像顯示在網頁上。我想要做的是迭代遍歷foreach循環,所以最新的內容首先顯示在網頁上。這是我的代碼:在PHP中向後遍歷一個foreach循環

$sql = "SELECT COUNT(*) FROM 'UPLOADPICS'"; 

    if ($sth = $dbhandle->query($sql)){ 
     if ($sth->fetchColumn() > 0){ 
      $sql = "SELECT link FROM 'UPLOADPICS'"; 
      foreach ($dbhandle->query($sql) as $row){ 
       $content = $row['link']; 
       ?> 
       <img src="<?php echo $content ?>" /> 
       <br/> 
       <br/> 
       <?php 
      } 
     } 

     else { 
      print "No rows matched the query"; 
     } 

這可能嗎?非常感謝!

+2

添加'ORDER BY'循環的順序通緝。在查詢之前,您不需要計算... –

+0

爲什麼不在SQL中對結果進行排序? – candyleung

回答

1

,如果你沒有在表中的日期字段..你可以通過ID以降序

$sql = "SELECT link FROM `UPLOADPICS` ORDER BY `id` DESC"; 

命令,如果你不喜歡,你可以使用array_reverse()函數

+0

這工作得很好!我正在使用SQLite,因此'rowid'已經存在。 對於那些想知道的,這裏是我的語法來顯示相反的順序: '$ sql =「SELECT link FROM'UPLOADPICS'ORDER BY rowid DESC」;' – DommyCastles

6

您可以使用ORDER BY命令您的結果首先顯示最近的項目,而不是向後循環。這通常是最常用的方法。

SELECT foo, bar 
FROM uploadpics 
ORDER BY 
    date DESC 

當然,這不僅僅是一個建議;如果不先把它們加載到一個新的數組集合中,然後迭代它,那麼你將無法反向運行這些值 - 所以你會浪費一些寶貴的時間和資源。

0

您可以對數組進行計數並使用簡單的索引變量向後迭代,每次迭代減1。

$arr = $dbhandle->query($sql); 
$i = count($arr) - 1; 

while ($i >= 0) 
{ 
    $content = $arr[$i]['link']; 
    ?> 
    <img src="<?php echo $content ?>" /> 
    <?php 
    $i--; 
} 
+0

這似乎是要走的路! 在// do $ arr [$ i];中有一個問題,是我在哪裏顯示圖像? – DommyCastles

+0

是的,確切地說,檢查我的編輯 – KiaiFighter

0

以及包括Order By會更合適,但你可能沒有日期字段!使用php的array_reverse() function會顛倒數組;在你的情況下,首先倒轉數組,然後應用foreach。

希望這有助於

0
$array=array("uno"=>array(1),"pepito"=>array(1),"clase"=>array(1),"a123"=>array(1)); 
echo 'normal<br>'; 
foreach($array as $k=>$v){ 
    echo $k." = ".$v."<br>"; 
} 
echo 'back<br>'; 
foreach(array_reverse($array) as $k=>$v){ 
    echo $k." = ".$v."<br>"; 
} 
+0

一些解釋去代碼不會錯,我認爲。 – khagler

1
<?php 
    $a = array('a', 'b', 'c'); 
    for ($i = count($a) - 1; $i >= 0; --$i) { 
     echo $a[$i]; 
    } 
    echo "\n"; 
?>