2010-10-29 41 views
1

繼上一個問題shown here之後,我想知道如何將以下代碼更改爲'foreach'語句?任何幫助非常感謝,S.PHP/MySQL將'while'語句轉換爲'foreach'

<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> 

回答

1

你可以這樣做:

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

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

但我給你的建議是分割你的編程邏輯和觀點的邏輯/代碼。你最好儘量創造一些如模型視圖控制器[http://en.wikipedia.org/wiki/Model - 查看 - 控制器]

或使用

+0

輝煌 - 適合我的代碼與你的例子,它的作品完美!非常感謝你和所有其他成員。 – ss888 2010-10-29 13:45:19

2

你代替不了while在這種情況下,一個foreachmysql_fetch_array/mysql_fetch_assoc只返回一行而不是傳遞資源的整個結果集(如果連接資源的內部指針位於末尾,則返回false)。

在你的情況,如果你需要對整個結果集,然後用它在foreach工作,你總是可以獲取整個結果在array設置(與while),然後用arrayforeach工作(見無窮回答一個例子)。如果你有一個巨大的結果集,這將花費更多的內存/減慢進程。

0

無法擺脫while循環的PHP框架(CakePHPZend FrameworkCodeIgniter)因爲mysql_fetch函數一次只返回一行。

如果你真的想要一個foreach()循環,你可以使用一個while環和mysql_fetch的數據填充到一個數組中,並在那之後該陣列上做了foreach循環。這會給你一個foreach,但它不會擺脫while

1

您必須使用實現Iterator接口的自定義類來封裝數據庫訪問,或者刪除mysql _ *()函數以支持提供已實現此類接口(如PDO)的類的另一個庫。

我相信這種改變雖然長期有趣,但在目前的情況下是沒有意義的。您應該先熟練使用arrays

0

While循環的foreach()

DB CREATE

  1. ID
  2. 標題
  3. HREF
  4. IMG
<?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>