2012-03-22 146 views
0

我有一個像這樣簡單的PHP foreach循環需要幫助

 $sn_count = 1; 
     $prodfilter = ""; 
     foreach($prods as $prod){ 
     $prodfilter .= "<div class=\"product\">".$prod['product'][1]."</div>"; 
     $sn_count++; 
     } 
     echo $prodfilter; 

每個迴路現在我的問題我的「產品」類的顯示邊框即使$prod['product'][1]不可用。所以我想用if語句來測試它。

If (product value available) { 
$prodfilter .= "<div class=\"product\">".$prod['product'][1]."</div>"; 
} 

我試過這樣。

if(!empty($prod['product'][1])) { 
$prodfilter .= "<div class=\"product\">".$prod['product'][1]."</div>"; 
} 

但它不工作。

+0

等待,你的循環迭代'$ steps',但是你正在測試和輸出'$ prod' ... ??每個循環迭代都會得到相同的結果。 – 2012-03-22 00:33:31

+0

@Michael:我也注意到了,但我假設他忽略了其他代碼來縮短它。 – 2012-03-22 00:34:41

回答

1

你可以嘗試一些事情

試試這個一開始

if(strlen(trim($prod['product'][$sn_count]))>0) { 
$prodfilter .= "<div class=\"product\">".$prod['product'][$sn_count]."</div>"; 
    } 

if(isset($prod['product'][$sn_count])) { 
$prodfilter .= "<div class=\"product\">".$prod['product'][$sn_count]."</div>"; 
    } 
+0

它會給你警告如果密鑰不存在,密鑰不存在。 – 2012-03-22 00:37:51

+0

但isset不會:-) – 2012-03-22 00:38:27

+0

這就是對的。骯髒的伎倆是預先@到$ prod來壓制警告;)哪些偏離路線不會被偏好工作。 – 2012-03-22 00:40:38

0

做的正確的事是檢查它是否是空的,因爲你嘗試過,但因爲它失敗了,那裏顯然有一些數據。你可以做一個var_dump並找出它在哪裏以及爲什麼它可能導致你找到問題的根源。

如果可用您的意思是聲明,那麼isset是順便使用的正確功能。

1

在我看來,正確的做法是檢查返回的行數。我假設你使用MySQL,因爲你沒有指定。如果你不使用它,請尋求額外的幫助。

http://www.php.net/manual/en/function.mysql-num-rows.php

if (mysql_num_rows($prods)!=0) { 
    //Do your code 
} 

這應該檢查你的查詢返回大於0的行(因此它需要繪製)。它修復它嗎?