PHP、SQL、带csv的in_array和while循环仅检索整数


PHP, SQL, in_array with csv and while loop only retrieving integer

我搜索过类似的问题,但找不到特定问题的正确答案。我的表(表)中有一列(数据),其中包含逗号分隔的值,这些值是id,例如

  • 第1行=4,5,45
  • 第2行=5,8,9
  • 第3行=第5行

我使用in_array函数来检索while循环中$data值的出现次数。因此,我使用sql函数来检索while循环中所有行中出现某个值(如"5")的次数。

问题是,如果$data值本身(即没有逗号,只有整数本身),我只能检索它,因此根据我在列表中的示例,我只能提取5次(第3行)。我想检索值"5"三次,因为它出现在所有行中。下面是我的代码,如果有任何帮助,我们将不胜感激。$selectiontext变量是用户从表单中输入的内容。

 $sql_frnd_arry_mem1 = mysql_query("SELECT data, id FROM table WHERE    data='$selectiontext'");
while($row=mysql_fetch_array($sql_frnd_arry_mem1)) { 
$datacheck = $row["data"]; 
$id = $row["id"]; 
}
$frndArryMem1 = explode(",", $frnd_arry_mem1);
if  (($frnd_arry_mem1 !=="") && (!in_array($id, $frndArryMem1))) {echo $id;}

谢谢。

您一直覆盖变量$datacheck$id,只剩下它们的最后一个版本。将大括号向下移动两行,如下所示:

$sql_frnd_arry_mem1 = mysql_query("SELECT data, id FROM table WHERE    data='$selectiontext'");
while($row=mysql_fetch_array($sql_frnd_arry_mem1)) { 
    $datacheck = $row["data"]; 
    $id = $row["id"]; 

    $frndArryMem1 = explode(",", $frnd_arry_mem1);
    if  (($frnd_arry_mem1 !=="") && (!in_array($id, $frndArryMem1))) {echo $id;}
}

我不完全确定您的需求,也不太清楚您打算做什么,因为缺少代码的一部分。我假设您希望将CSV文件中逗号分隔的每一行($frnd_arry_mem1为行)与列数据中的数据进行比较,如果出现任何逗号分隔的数据(未出现)。假设你已经在CSV中循环,这将是代码(未测试):

注意:如果你可以不这样做的话,在循环中检索数据可能效率很低,但我不能说,因为我不知道你的脚本的全部规格。

如果我弄错了规格,请澄清,我会尽力提供进一步的帮助。

$sql = "SELECT data, id
        FROM table
        WHERE data='$selectiontext'";
$sql_frnd_arry_mem1 = mysql_query($sql);
$results = array();
// get values to check
while ($row = mysql_fetch_array($sql_frnd_arry_mem1))
{
  $results[] = array(
                 'datacheck' => $row["data"],
                 'id' => $row["id"],
               ); 
}
foreach ($results as $result)
{
   $frndArryMem1 = explode(",", $frnd_arry_mem1);
   $data = explode(',', $result['datacheck']);
   foreach ($data as $d)
   {
     if  (($frnd_arry_mem1 !=="") && (!in_array($d, $frndArryMem1)))
     {
       echo 'DEBUG: Record #' . $id . ' not found, value:' . $d . '</br>';
     }
   }
}