Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果在db行中循环,in_array()会不断追加值_Php_Mysql_Arrays - Fatal编程技术网

Php 如果在db行中循环,in_array()会不断追加值

Php 如果在db行中循环,in_array()会不断追加值,php,mysql,arrays,Php,Mysql,Arrays,我需要识别一个数组(指针)中的值出现在另一个数组(haystack)中的每个实例in_array()似乎是我最好的选择,下面的代码工作得很好,直到我需要在从数据库获取的行上使用它为止——它会不断追加值,而不是每次调用时都设置值 虽然在这种情况下我实际上无法使用unset(),但我惊讶地发现,即使这样似乎也无法解决问题 更新-返回内容的示例 我临时更改了db值,使$TINERS每行只有一个值(以便能够对填充我屏幕的值进行排序;-)) 虚假的 虚假的;虚假的;是的 虚假的;虚假的;是的;虚假的;是

我需要识别一个数组(指针)中的值出现在另一个数组(haystack)中的每个实例
in_array()
似乎是我最好的选择,下面的代码工作得很好,直到我需要在从数据库获取的行上使用它为止——它会不断追加值,而不是每次调用时都设置值

虽然在这种情况下我实际上无法使用
unset()
,但我惊讶地发现,即使这样似乎也无法解决问题


更新-返回内容的示例

我临时更改了db值,使$TINERS每行只有一个值(以便能够对填充我屏幕的值进行排序;-))

  • 虚假的
  • 虚假的;虚假的;是的
  • 虚假的;虚假的;是的;虚假的;是的
  • 虚假的;虚假的;是的;虚假的;是的;虚假的;是的
  • 虚假的;虚假的;是的;虚假的;是的;虚假的;是的;虚假的
    此操作正常运行 (我已经发布了一个功能示例)

    这会不断添加值-编辑以反映我正在使用的代码

    $Customer_Categories_Arr = array('Casual','Trendy'); 
    
    if ($stmt->columnCount()) {            
      while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {    
         $Product_Categories_Arr[]=$row["Taste_Category"];          
          // Use when column contains CSV
          // $Product_Categories_Arrx = explode(',', trim($Product_Categories_Arr[0]));          
          foreach ($Product_Categories_Arr as $Product_Category_Arr) {          
                  if (in_array($Product_Category_Arr, $Customer_Categories_Arr)){   
                      $Matches_Product_Category = "True"; 
                  } else {                                 
                      $Matches_Product_Category = "False";  
                  }           
                      echo $Product_Category_Arr, ', ', $Matches_Product_Category, '; ';
            }   
       }
    }
    

    如果您希望第二个代码块执行第一个代码块(工作正常)所执行的操作,则第二个代码块应如下所示:

    if ($stmt->columnCount()) {
       while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {   
           $needle =$row["product_var"];              
           $Match = "False";  
            if (in_array($needle, $haystack)){   
                $Match = "True"; 
            }                  
        }
    }
    

    您不需要使用foreach,因为在第二个块中,foreach被while循环所取代。

    不清楚您要做什么。但也许这会有帮助:

    $customerCategories=array('Casual','Trendy');
    如果($stmt->columnCount()){
    而($row=$stmt->fetch(PDO::fetch\U ASSOC)){
    $productCategoryRow=$row['TASTER_Category'];
    //如果它不起作用,请尝试取消对下一行的注释
    //$productCategories=[];
    $PRODUCTCATEGORES=分解(',',修剪($productCategoryRow));
    $match=“False”;
    foreach($productCategories作为$productCategory){
    if(在数组中($productCategory,$customerCategories)){
    $match=“True”;
    }
    echo$匹配。“;”;
    }
    }
    }
    

    这会在每次循环完成时在屏幕上打印结果。这就是你的意思吗?

    我要试着解决这个问题。我认为问题在于:

    $needles[]=$row["product_var"];
    
    我认为这应该是:

    $needles=$row["product_var"];
    
    “product_var”列包含一个CSV(如您所述),因此我可以举一个如下示例:

    $csv = "jake;john;alex;kim";
    
    带括号($Piners[])的示例:

    编辑(更多解释):

    如果我使用print\r,我会看到数组正在扩展,这在您的示例中是如何发生的:

    步骤1:it向$niels添加一个数组,其中包含值('jake'、'john'、'alex'、'kim')

    步骤2:it向$Nikes添加一个数组,因此它包含2倍的值('jake'、'john'、'alex'、'kim')

    步骤3:it向$Nikes添加一个数组,因此它包含3倍的值('jake'、'john'、'alex'、'kim')

    等等

    现在没有支架($针):

    每次数组只包含值('jake'、'john'、'alex'、'kim')——这就是您想要的

    这能解释“不断扩大的价值观”吗?(或者我只是在做一些与你的问题无关的蠢事??)

    编辑:


    如果这就是问题所在,那么您将添加到数组中,而不是仅使用$row[“product_var”]中的新数组(希望这有意义;我似乎不太擅长解释发生了什么)

    为什么不呢
    $Match
    没有以任何方式使用。哪些值附加到哪个数组?我不明白,为什么要收集所有指针,为什么不使用单个指针在该数组中进行搜索?如果我读对了,您有一个表,其中有一列名为“product_var”,而这个“product_var”包含一个数组(?)。与第一个示例相比,还有更多的内容(它是一个表,其中一列包含一个数组)。不是每个“产品”都是针吗?(与第一个示例相比,它不是一组针)@hobbs-我只是想保持代码的整洁:-)显然我在使用它;-)目前,我只是简单地打印这些值,以确保它正常工作,一旦它工作,我将把它与一大块代码结合起来,这将允许我根据匹配的属性为产品建议分配权重,这些属性修复了“附加”问题,但它也停止了更新$Match的值(因为第一个返回'False'它们都等于'False')我也编辑了答案来解决你的第二个问题。我喜欢你的代码有多整洁:-D,但遗憾的是,它仍然导致同样的问题:-(事实上,我意识到我的编辑没有改变任何东西:D,但是,我认为两个版本的答案在逻辑上都是正确的。你什么时候真正检查或返回$Match的值?@ChayaCooper你能解释一下什么“一直在追加值”吗意思是?也许会显示$haystack和您的表的实际内容?我认为这个答案应该有效,因此示例和“真实内容”之间肯定有一些重要区别。遗憾的是,仍然不断追加最新的$match值“追加最新的$match值”是什么意思?如果指针不在干草堆中,您希望循环停止吗?或者您正在if块中执行匹配为真的操作吗?因为$match=“true”没有附加任何内容。可能您的真实代码包含类似$match的内容。=“true”?没有,但我可以在捕获一些zzz后发布完整的代码(现在是早上6点;-))是的,请。我想这会有帮助:)遗憾的是,这也阻止了它将当前值添加到$match
    $csv = "jake;john;alex;kim";
    
    for($i=0; $i<5; $i++) {
        $needles[] = explode(";", $csv);
        echo(count($needles).", ");
    }
    
    1, 2, 3, 4, 5,
    
    for($i=0; $i<5; $i++) {
        $needles = explode(";", $csv);
        echo(count($needles).", ");
    }
    
    4, 4, 4, 4, 4,