在PHP中向后遍历一个foreach循环

问题描述:

我在这里有一个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

,如果你没有在表中的日期字段..你可以通过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

您可以使用ORDER BY命令您的结果首先显示最近的项目,而不是向后循环。这通常是最常用的方法。

SELECT foo, bar 
FROM uploadpics 
ORDER BY 
    date DESC 

当然,这不仅仅是一个建议;如果不先把它们加载到一个新的数组集合中,然后迭代它,那么你将无法反向运行这些值 - 所以你会浪费一些宝贵的时间和资源。

您可以对数组进行计数并使用简单的索引变量向后迭代,每次迭代减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

以及包括Order By会更合适,但你可能没有日期字段!使用php的array_reverse() function会颠倒数组;在你的情况下,首先倒转数组,然后应用foreach。

希望这有助于

$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

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