exclude数组在PHP中不起作用

时间:2012-12-09 08:06:40

标签: php

下面是我的代码,通过它我正在尝试从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

1 个答案:

答案 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