首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP/MySQL将'while‘语句转换为'foreach’

问PHP/MySQL将'while‘语句转换为'foreach’
EN

Stack Overflow用户
提问于 2010-10-29 20:47:19
回答 5查看 1.3K关注 0票数 1

在前面的问题shown here之后,我想知道如何将下面的代码更改为“foreach”语句?非常感谢你的帮助,S。

代码语言:javascript
复制
<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>
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-10-29 20:50:44

你可以这样做:

代码语言:javascript
复制
$data = array();
while($homeG=mysql_fetch_array($homeB)) {   
    $data[] = $homeG;
}

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

但我给你的建议是拆分你的编程逻辑和视图逻辑/代码。你最好试着创建一些东西作为模型视图控制器[http://en.wikipedia.org/wiki/Model-视图-控制器]

或者使用PHP框架(CakePHP、Zend Framework、CodeIgniter)

票数 1
EN

Stack Overflow用户

发布于 2010-10-29 20:50:17

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

在您的例子中,如果您需要整个结果集,然后在foreach中使用它,那么您总是可以在array (使用while)中获取整个结果集,然后使用带有foreach的array (参见infinity answer中的示例)。如果你有一个很大的结果集,这将占用更多的内存/减慢进程。

票数 2
EN

Stack Overflow用户

发布于 2010-10-29 20:56:45

您必须使用实现Iterator接口的自定义类来封装数据库访问,或者删除mysql_*()函数,转而使用另一个库,后者提供了已经实现此类接口的类,例如PDO。

我相信这种改变,虽然从长远来看很有趣,但在你目前的情况下意义不大。您应该首先精通arrays的使用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4051982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档