2016-04-23 53 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的元素。

相关问题