2016-04-23 63 views
0

我在我的程序驗證碼:如何檢查結果數組元素存在於另一個結果陣列

<?php 

session_start(); 
$_SESSION['user_id']=201102887; 
$con = mysqli_connect('localhost', 'root', ''); 
if(!$con) 
{ 
    die("not ok"); 
} 
mysqli_select_db($con,"uoh"); 
$q = "SELECT * FROM courses 
     INNER JOIN transfer_student_courses 
     ON   transfer_student_courses.course_number = courses.course_number 
     INNER JOIN transfered_courses 
     ON   transfer_student_courses.sn = transfered_courses.sn 
     AND   transfer_student_courses.student_ID = " . $_SESSION['user_id']; 
$result = mysqli_query($con , $q); 
if($result){ 
    echo "<table>"; 
    echo "<tr>"; 
    echo "<th>equivalent</th>"; 
    echo "</tr>"; 
    while($row = mysqli_fetch_array($result)) 
    { 
     echo "<tr>"; 
     echo "<td>" . $row["equivalent"]. "</td>"; 
     echo "</tr>"; 
    } 
    echo "</table>"; 
} 

mysqli_select_db($con,"uoh"); 
$q = "SELECT * FROM courses 
     LEFT JOIN degree_plan 
     ON   degree_plan.course_number = courses.course_number 
     LEFT JOIN student_record 
     ON   courses.course_number = student_record.course_number 
     AND  student_record.id = ". $_SESSION['user_id']." 
     WHERE  degree_plan.major = 'COE' 
     ORDER BY term_no"; 

$result = mysqli_query($con , $q); 
if($result){ 
    echo "<table>"; 
    echo "<tr>"; 
    echo "<th>course</th>"; 
    echo "</tr>"; 

    while($row = mysqli_fetch_array($result)) 
    { 
     echo "<tr>"; 
     echo "<td>" . $row["code"]. "</td>"; 
     echo "</tr>"; 
    } 
} 
echo "</table>"; 

?> 

我在這兩個代碼查詢,每一個給我的課程列表。 如果課程出現在第一個列表中,我不希望它出現在第二個列表中。

如果您在下面看到此代碼的輸出,則第一個查詢會給我MATH 101,第二個查詢也會給我MATH 101

我想MATH 101不會出現在第二個課程列表中,因爲它也出現在第一個列表中。

我該如何寫一個PHP語言的函數來做到這一點?

輸出:

equivalent 
MATH 101 

course 
PHYS 101 
CHEM 101 
PE 101 
IAS 101 
MATH 101 
ENGL 101 
+0

您希望第一個列表中的某些內容不會出現在第二個列表中。你有什麼其他的查詢? –

+0

只有兩個查詢 – joseph

+0

什麼是課程表主鍵名ID? –

回答

0

首先,所有的存儲陣列中的equivalent課程,說$equivalent陣列。然後在第二個while循環中使用in_array()函數來檢查課程是否已經打印在第一個表格中。

這裏的參考:

所以,你的代碼應該是這樣的:

<?php 
    session_start(); 
    $_SESSION['user_id']=201102887; 
    $con = mysqli_connect('localhost', 'root', ''); 
    if(!$con){ 
     die("not ok"); 
    } 
    mysqli_select_db($con,"uoh"); 
    $q = "SELECT * FROM courses INNER JOIN transfer_student_courses ON 
    transfer_student_courses.course_number=courses.course_number INNER 
    JOIN transfered_courses ON transfer_student_courses.sn=transfered_courses.sn 
    AND transfer_student_courses.student_ID = " . $_SESSION['user_id']; 
    $result = mysqli_query($con , $q) ; 

    $equivalent = array(); 
    if($result){ 
     echo "<table>"; 
     echo "<tr>"; 
     echo "<th>equivalent</th>"; 
     echo "</tr>"; 
     while($row = mysqli_fetch_array($result)){ 
      $equivalent[] = $row["equivalent"]; 
      echo "<tr>"; 
      echo "<td>" . $row["equivalent"]. "</td>"; 
      echo "</tr>"; 
     } 
     echo "</table>"; 
    } 

    mysqli_select_db($con,"uoh"); 
    $q = "SELECT * FROM courses 
    LEFT JOIN degree_plan ON degree_plan.course_number= courses.course_number 
    LEFT JOIN student_record ON courses.course_number= student_record.course_number 
    AND student_record.id= ". $_SESSION['user_id']." 
    WHERE degree_plan.major='COE' ORDER BY term_no"; 

    $result = mysqli_query($con , $q) ; 
    if($result){ 
     echo "<table>"; 
     echo "<tr>"; 
     echo "<th>course</th>"; 
     echo "</tr>"; 

     while($row = mysqli_fetch_array($result)){ 
      if(in_array($row["code"], $equivalent)){ 
       continue; 
      } 
      echo "<tr>"; 
      echo "<td>" . $row["code"]. "</td>"; 
      echo "</tr>"; 
     } 
    } 
    echo "</table>"; 
?> 
0

您可以在第一次查詢的結果加載到一個數組,然後當你的第二個查詢顯示的結果,你顯示什麼檢查結果數組中存在前如果有,請跳過它。

所以,你的第一次查詢後:

$equivalent = array(); // Setup a blank array to store the results 
while($row = mysqli_fetch_array($result)) 
{ 
    echo "<tr>"; 
    echo "<td>" . $row["equivalent"]. "</td>"; 
    echo "</tr>"; 
    $equivalent[] = $row['equivalent']; // Add the result into your array 
} 
在你的課程代碼部分

然後:

while($row = mysqli_fetch_array($result)) 
{ 
    if (! in_array($row['code'], $equivalent)) 
    { 
     echo "<tr>"; 
     echo "<td>" . $row["code"]. "</td>"; 
     echo "</tr>"; 
    } 
} 

這應該停止在這兩個結果集的任何條目的顯示被顯示在第二。

HTH

0

解決方案:in_array( 「字」,$陣列)

運行查詢得到的結果到一個數組:

while($row = mysqli_fetch_array($result)) 
{ 
    arr1[]=$row["code"]; 
} 

對於第二個查詢運行查詢,並添加reults如下:

while($row = mysqli_fetch_array($result)){ 
    if (in_array($row[code], $arr1)) 
    { 
     //don't add to array2 
    } 
    else 
    { 
     arr2[] = $row["code"]; 
    } 
} 

然後根據需要可能會echo的元素。

相關問題