将MySQL行与PHP数组值进行比较

时间:2012-12-18 19:22:19

标签: php mysql arrays compare

我正在尝试将列表中的IP地址与阻止的IP列表进行比较。如果IP地址等于$ blockedIP数组中的地址,则该行不包含在列表中。该列表是从mysqli_query填充的。如果IP地址与数组中的IP地址匹配,我想要做的是排除整行。

echo '<div class="genericTable"><h2>Downloaded Sermons Report</h2><table>';

$blockedIP = array('69.58.178.58', '173.199.115.123', '173.199.120.99');

foreach($blockedIP as $ip){
$sql = mysqli_query($db, "SELECT * FROM dl_log WHERE ipaddress <> '".$ip."'");

while($row = mysqli_fetch_assoc($sql)){
    echo '<tr>';

    if($row['ipaddress'] !== $ip){
        foreach($row as $each){
            echo '<td class="genericTable">'.$each.'</td>';
        }
    }
    echo '</tr>';
  }
}
echo '</table></div>';

我已经尝试了几种不同的方式,并获得整个列表或每一行&amp;列与数组进行比较,这使得表格看起来更加突出。我正在使用foreach将值与数组进行比较。我应该把它放在哪里? 感谢。

2 个答案:

答案 0 :(得分:2)

  

如果IP地址与数组中的IP地址匹配,我想要排除整行。

您有几个选择:

  1. 使用SQL IN的一个查询。使用implode()压缩阻止的IP地址。

    SELECT * FROM dl_log WHERE ipaddress NOT IN (...);
    
  2. 一次查询并使用PHP in_array()过滤结果

    // SQL
    SELECT * FROM dl_log;
    
    // PHP
    if (!in_array($row['ipaddress'], $blockedIP))
    

答案 1 :(得分:0)

如果您不想打印行,请更改

if($row['ipaddress'] !== $ip){

if(!in_array($row['ipaddress'], $blockedIP)){