2014-09-29 64 views
2

我正在循環瀏覽產品清單並設置variable值來標識與客戶所需屬性相交的產品屬性。在客戶會話期間(或者至少在他們保留在該頁面上),爲每個產品設置variable值的方法是什麼?目前variable的價值似乎並沒有保留每個產品的ID超出分配它的初始while聲明的範圍。如何在用戶會話期間爲產品設置var值?

每個變量都表示某個特定屬性是否與所需屬性的客戶列表匹配。我試圖將標籤(臨時)分配給每個產品,以指示哪個屬性匹配/不匹配該客戶,而不是無數次地運行查詢。

我正在爲100-200個變量動態調整(使用variable variables),所以我在下面發佈了一個簡化的代碼片段。

$Matches_Pr_Color = "Null"; 
$colors_love_AR = array('Black','Charcoal','Light_Gray','White','Royal_Blue','Dodger_Blue','Red'); 

try { 
    $stmt = $conn->prepare("SELECT * FROM products");  
    $stmt->execute();   
} catch(PDOException $e) {echo $e->getMessage();} 
    if ($stmt->columnCount()) { 
     while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
      $Pr_Color=$row['Color'];       
      if (in_array($Pr_Color, $colors_love_AR)){  
       $Matches_Pr_Color = "True"; 
       } 
      else {     
       $Matches_Pr_Color = "False"; 
       }         
       echo $Matches_Pr_Color, "<br/>"; 
      } 
    } 
    if ($Matches_Pr_Color == "True") { 
     echo $row['product_id'].', '.$row['Color'], "<br/>"; 
    } 
    else { 
     echo $row['product_id'], " No Match<br/>"; 
    } 
+0

請澄清你的問題,不清楚你的問題是什麼 – Steve 2014-09-29 17:46:12

+0

@Steve - 對於每個產品的id,超出了分配它的初始WHILE語句的範圍,var值不會被設置:-( – 2014-09-29 17:56:33

+0

'if($ Matches_Color =「真」)'我感覺這是一個錯字。答案已刪除。 – 2014-09-29 18:16:55

回答

0

如果需要存儲外循環使用效果,使用數組,如:

$colors_love_AR = array('Black','Charcoal','Light_Gray','White','Royal_Blue','Dodger_Blue','Red'); 
$size_love_AR = array(16,18,20); 
$material_love_AR = array('leather','tweed','cotton'); 

$results = array(); 
if ($stmt->columnCount()) { 
     while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
      $product_data=array();       
      $product_data['color'] = in_array($row['Color'], $colors_love_AR);  
      $product_data['size'] = in_array($row['Size'], $size_love_AR); 
      $product_data['material'] = in_array($row['Material'], $material_love_AR); 

      $results[$row['product_id']] = $product_data;       
     } 
} 

這將創建一個由PRODUCT_ID索引的產品數據的數組,例如:

array(
     1=> array('color'=>true, 'size'=>false, 'material'=>true), 
     2=> array('color'=>false, 'size'=>false, 'material'=>true), 
     3=> array('color'=>true, 'size'=>true, 'material'=>false), 
     //etc 
    ); 

您可以使用在以後的代碼數組,像這樣:

if($results[2]['color']) 
    //product with id 2 is a match for this customers color choice 
+0

我是否需要爲每個變量(即$ Matches_Pr_Color)分別執行此操作,還是有方法將它們組合到某種陣列數組中? – 2014-09-29 19:38:12

+0

@ChayaCooper嗯,你當然可以有多維數組,但我仍然無法真正瞭解你正在嘗試做什麼,所以我不能給出更具體的例子 – Steve 2014-09-29 19:42:49

+0

每個變量是一個特定屬性是否匹配客戶的列表所需的屬性。我試圖基本上爲每個產品分配標籤,以指示哪些屬性匹配/不匹配該客戶 – 2014-09-29 19:58:32

相關問題