下面是我的代码,通过它我正在尝试从SQL数据库的下拉框中获取某些值。我还试图在加载到下拉框之前排除一些数据。
在我的代码中$excld[]
工作正常,并且在填充下拉列表时未显示预期的零值,但我期望通过$exclude=$rec['chkNum'];
排除的值不起作用,或者值I不想在下拉列表中显示。有人能告诉我这种方法有什么问题吗?
感谢。
$exclude = array();
$query = "SELECT * FROM invoentry WHERE dist_inv='$distUsr'";
$runx=mysqli_query($db,$query) or die ("SQL Error");
$norx=mysqli_num_rows($runx);
while ($rec = mysqli_fetch_array($runx))
{
$exclude[] = $rec['chkNum']; $excld[] = '0';
}
$SQLx="SELECT * FROM newchk WHERE dist_chk='$distUsr'";
$runx=mysqli_query($db,$SQLx) or die ("SQL Error");
$norx=mysqli_num_rows($runx);
while ($rec = mysqli_fetch_array($runx))
{
if($rec['sbstart'] != '0' & $rec['sbend'] != '0') {
for($i=$rec['sbstart']; $i<=$rec['sbend']; $i++)
{
if (!in_array($i, $exclude, $excld))
{
echo "<option id='options' value='$i'>$i<br></option>";
}
} }
if($rec['gwstart'] != '0' & $rec['gwend'] != '0') {
for($i=$rec['gwstart']; $i<=$rec['gwend']; $i++)
{
if (!in_array($i, $exclude, $excld))
{
echo "<option id='options' value='$i'>$i<br></option>";
}
} }
}
编辑:
数据库结构如下; 数据库名称:regional_data 同一数据库中的两个表为invoentry和newchk
invoentry:
usr_inv dist_inv chkNum InvoNum
---------------------------------
John Guardian 300455 457gXT
newchk:
usr_chk dist_chk sbstart sbend totsb gwstart gwend totgw
----------------------------------------------------------
John Guardian 300400 300550 151 300 310 10
答案 0 :(得分:1)
我看不出它在任何情况中是如何工作的(好吧,在第一次迭代它可以工作,因为$i
仍然是字符串然后)。看看in_array
接受的参数
bool in_array (混合 $ needle ,数组 $ haystack [,bool $ strict = FALSE ])
在你的情况下,你传递的是:integer $i
,字符串数组$exclude
(从数据库获取的所有内容都是字符串,除非你自己编译)和非空数组$excld
填充字符串“0”。最后一个参数的计算结果为TRUE
(数组不为空),因此php不仅要检查值,还要检查类型。由于你传递整数和字符串数组,php不会在内部找到任何具有相同类型和值的元素,因此它将打印所有元素。
要使其发挥作用的改变:
while ($rec = mysqli_fetch_array($runx))
{
$exclude[] = $rec['chkNum']; //remove $excld[] = '0';
}
// add 0 to $exclude
$exclude[] = '0';
和
if (!in_array($i, $exclude)) //remove , $excl