我正在循环浏览产品清单并设置variable
值,以识别与客户所需属性相交的产品属性。在客户会话期间(或至少在他们保留在该页面上时)为每个产品设置variable
值的合理有效方法是什么?目前,似乎没有为每个产品的id保留variable
的值,超出了分配它的初始while
语句的范围。
每个变量都表明特定属性是否与客户的所需属性列表相匹配。我没有必要无数次地运行查询,而是试图基本上为每个产品分配标签,以指示哪些属性与该客户匹配/不匹配。
我正在为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 :(得分: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