1

下面是我的代码,我试图通过它从 SQL 数据库中获取某些值到下拉框中。我还试图在加载到下拉框之前排除一些数据。

在我的代码$excld[]中工作正常,并且在填充下拉列表时未显示预期的零值,但我希望排除的值$exclude=$rec['chkNum'];不起作用,否则我不想在下拉列表中显示的值仍然显示。有人可以告诉我这种方法有什么问题吗?谢谢。

$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

发票:

usr_inv dist_inv chkNum InvoNum
---------------------------------
John     Guardian   300455   457gXT

纽奇克:

usr_chk  dist_chk sbstart sbend totsb gwstart gwend totgw
----------------------------------------------------------
John     Guardian 300400  300550 151   300     310   10
4

1 回答 1

1

我不明白它是如何工作的任何情况(好的,在第一次迭代中它可以工作,因为那时$i仍然是字符串)。看看in_array接受哪些参数

bool in_array ( 混合$needle , array $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
于 2012-12-09T09:24:16.340 回答