2012-12-09 24 views
0

下面是我的代碼,我試圖通過它從SQL數據庫中的下拉框中獲得某些值。我也試圖在加載到下拉框之前排除一些數據。排除數組不能在PHP中工作

在我的代碼$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兩個表

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

你能編輯您的問題向我們展示了'invoentry'和'newchk'表的結構?這個問題可能有一個純粹的SQL解決方案。 – Charles

+0

@Charles:您好,我試圖更新數據庫表結構與標題和示例數據集。希望這個澄清,並請容忍與我,如果看起來不是那麼好。 –

回答

1

我看不出它如何能工作在任何情況下(好吧,在第一次迭代它可以工作,因爲$i仍然是字符串)。看看哪些參數in_array接受

布爾in_array(混合$針,陣列$草垛 [,布爾$嚴格 = FALSE])

在你的情況下,你傳遞:整數$i,字符串數組$exclude(從數據庫中提取的所有東西都是一個字符串,除非你自己施放)並且非空填充字符串「0」的數組$excld。最後一個參數的計算結果爲TRUE(數組不爲空),因此php不僅檢查值,還檢查類型。由於你的ara傳遞整數和字符串數組,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 
+0

謝謝@ dev-null-dweller。你所強調的是正確的,我想現在我有正確的理解og in_array是如何工作的。非常感謝您花時間回顧這一問題。 –