PHP / MySQL将'while'语句转换为'foreach'

时间:2010-10-29 12:47:19

标签: php mysql

继上一个问题shown here之后,我想知道如何将下面的代码更改为'foreach'语句?任何帮助都非常感谢,S。

<div id="banner-wrap">          
    <div id="banner" class="gallery">               
        <ul class="galleryBar">               

                <?php       
                $homeB=mysql_query("select * from istable where fpGallery = '1' ORDER BY RAND() LIMIT 0, 5");
                while($homeG=mysql_fetch_array($homeB)) {   
                $linkcode = $homeG['title'];
                $linkcode = str_replace(" ","",$linkcode);
                echo '
                <li>
                <a href="'.$wwwUrl.'images/'.$homeG['image'].'" rel="'.$linkcode.'">
                <img src="'.$wwwUrl.'images/tn/'.$homeG['image'].'" width="75" height="55" alt="'.$homeG['title'].'" />
                </a>
                </li>                       
                ';
                }                                   

        echo '</ul>';
         echo '</div>'; 

                while($homeGal=mysql_fetch_array($homeB)) {                             
                echo '
                <div id="'.$linkcode.'" class="overlay">
                    <h3>'.$homeGal['title'].'</h3>
                    <h4>'.$homeGal['location'].'</h4>                           
                </div>                                              
                ';
                }

                ?>          
    </div>

5 个答案:

答案 0 :(得分:2)

在这种情况下,您无法将while替换为foreachmysql_fetch_array / mysql_fetch_assoc只返回一行而不是传递的资源的整个结果集(如果连接资源的内部指针在最后,则返回false)。

在您的情况下,如果您需要整个结果集,然后在foreach中使用它,则始终可以在array(使用while)中获取整个结果集,并且然后使用array使用foreach(有关示例,请参阅无穷大答案)。如果你有一个巨大的结果集,这将花费更多的内存/减慢进程。

答案 1 :(得分:1)

您可以执行以下操作:

$data = array();
while($homeG=mysql_fetch_array($homeB)) {   
    $data[] = $homeG;
}

foreach($data as $row) {
    // your code hre
}

但我给你的建议是拆分你的编程逻辑和查看逻辑/代码。您最好尝试创建模型视图控制器[http://en.wikipedia.org/wiki/Model - 视图 - 控制器]

或使用PHP框架(CakePHPZend FrameworkCodeIgniter

答案 2 :(得分:1)

您必须使用实现Iterator接口的自定义类封装数据库访问,或者删除mysql _ *()函数以支持另一个提供已实现此类接口的类的库,例如PDO

我相信这种变化虽然长远有趣,但在你目前的情况下却没什么意义。您应该首先熟练使用arrays

答案 3 :(得分:0)

你无法摆脱while循环,因为mysql_fetch函数一次只能返回一行。

如果您真的想要一个foreach()循环,可以使用while循环和mysql_fetch将数据填充到数组中,然后再执行foreach循环在那个阵列上。这会给你一个foreach,但它不会摆脱while

答案 4 :(得分:0)

while循环 foreach()

DB CREATE

  
      
  1. ID
  2.   
  3. 标题
  4.   
  5. HREF
  6.   
  7. img
  8.   
<?php 
   $this = array();

   $db = mysql_query('SELECT * FROM `'.DB_PREFIX.'product` where id order by id asc', ConnectDb()); // ConnectDb() to PHP Deprecated: mysql_query() error fix

   while($see=mysql_fetch_array($db)) {   
         $this[] = $see;
   }
?>

<ul class="product">
  <?php foreach ($this as $product) { ?>
    <li><a href="<?php echo $product['href']; ?>" title="<?php echo $product['title']; ?>"><img src="<?php echo $product['img']; ?>" alt="<?php echo $product['title']; ?>"><?php echo $product['title']; ?></a></li>
  <?php } ?>
</ul>