我搜索过类似的问题,但找不到特定问题的正确答案。我的表(表)中有一列(数据),其中包含逗号分隔的值,这些值是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>';
}
}
}