2012-12-09 10 views
0

아래 코드를 통해 SQL 데이터베이스에서 드롭 다운 상자에 특정 값을 가져 오려고합니다. 또한 드롭 다운 상자에로드하기 전에 일부 데이터를 제외하려고합니다.exclude 배열이 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>"; 
      } 
     } } 
    } 

EDIT 다음과 같이

데이터베이스 구조이고; 데이터베이스 이름 : 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

나는 그것이 작동 할 수 표시되지 않습니다 어떤 경우 (ok, 첫 번째 반복에서 작동 할 수 있습니다. 이후 $i부터 여전히 문자열입니다.). 어떤 in_array 매개 변수 것은 받아보세요

부울 와 in_array (혼합 $ 바늘, 배열 $는 건초 더미에 [부울 $ 엄격한 = FALSE])에서

당신의 문자열을 배열 $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 
+0

@ dev-null-dweller 감사합니다. 당신이 강조한 것은 정확하고 이제는 in_array가 어떻게 작동하는지에 대한 정확한 이해가 있습니다. 이것을 검토하는 데 많은 시간을 가져 주셔서 감사합니다. –

관련 문제