Php 如何在用户会话期间为产品设置var值?

Php 如何在用户会话期间为产品设置var值?,php,session,variables,scope,Php,Session,Variables,Scope,我在一个产品清单中循环,并设置变量值,以识别与客户所需属性相交的产品属性。在客户会话期间或至少在他们停留在该页面时,为每个产品设置变量值的合理有效方法是什么?目前,在分配变量的初始while语句的范围之外,似乎没有为每个产品的id保留变量的值 每个变量都指示特定属性是否与客户的所需属性列表匹配。我不再需要无数次地运行查询,而是尝试将标签临时分配给每个产品,以指示哪些属性与该客户匹配/不匹配 我使用变量变量动态地处理100-200个变量,所以我在下面发布了一个简化的代码片段 $Matches_P

我在一个产品清单中循环,并设置变量值,以识别与客户所需属性相交的产品属性。在客户会话期间或至少在他们停留在该页面时,为每个产品设置变量值的合理有效方法是什么?目前,在分配变量的初始while语句的范围之外,似乎没有为每个产品的id保留变量的值


每个变量都指示特定属性是否与客户的所需属性列表匹配。我不再需要无数次地运行查询,而是尝试将标签临时分配给每个产品,以指示哪些属性与该客户匹配/不匹配

我使用变量变量动态地处理100-200个变量,所以我在下面发布了一个简化的代码片段

 $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/>"; 
  }

如果需要存储结果以便在循环外部使用,请使用数组,例如:

$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;                         
      }   
}
这将创建一个由产品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

请澄清你的问题,不清楚你的问题是什么is@Steve-每个产品id的var值未保持设置状态,超出了初始WHILE语句分配它的范围:-如果$Matches\u Color=True,我觉得这是一个输入错误。答案被删除了。嗯…,我们能称之为某种形式的成功吗?我将对这个问题进行投票,看看是否有其他人对此有所了解。好的,$Matches\u Pr\u Color在循环的每次迭代中都会被覆盖,因此最终的if/else块将基于循环中的最后一个结果。我怀疑这是有意的,但我无法计算出你想要做什么,我需要为每个变量分别做这件事,即$Matches\u Pr\u Color,或者有没有办法将它们组合成某种数组?@ChayaCooper你当然可以有多维数组,但我仍然无法真正理解你想要做什么,所以我不能给出一个更具体的例子,每个变量都表示某个特定属性是否与客户的期望属性列表相匹配。我不再需要无数次地运行查询,而是尝试为每个产品分配标签,以指示哪些属性与该产品匹配/不匹配customer@ChayaCooper我明白了,只是不知道你以后打算如何使用这些变量。如果您只是想知道某个产品标识是否与当前客户匹配,那么我的编辑可能会有帮助,请原谅误解;-因为每个产品都有一个长长的属性列表。100-200并且很少每个属性都匹配,我需要能够引用匹配的特定属性。我计划以几种不同的方式对信息进行切片和切割,包括在特定属性上匹配的产品,以及根据分配给属性的权重进行排序等。