仅显示数组未检索的值

时间:2016-05-20 18:17:55

标签: php arrays loops

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
</head>

<body>
<select>
<?php 
include 'connection.php';
$q = "SELECT * FROM rooms WHERE duration='first lecture' and day='Sunday'";
$r = mysql_query($q); 
$ro = mysql_num_rows($r);
while($row = mysql_fetch_array($r)){

for ($i=1; $i<=14; $i++)
{
$exclude = array($row['name']);
if(in_array($i, $exclude)) continue;
?>
<option value="<?php echo $i; ?>"><?php echo $i; ?></option>
<?php
}
}
?>          
</select>
</body>
</html>

我想使用FOR LOOP在一个循环中消除由数组检索的元素。假设$ row检索了一些值,我想要的FOR FOR LOOP是显示1到14之间的数字,除了检索到的值。

我尝试了很多次并且我成功了,但是第一次循环消除了第一次检索,第二次消除了第二次检索到的值。

有没有办法一次消除这两种情况?

2 个答案:

答案 0 :(得分:1)

考虑$ row ['name']是一个int并使用下面的代码

while($row = mysql_fetch_array($r)){
    $exclude[] = $row['name'];
}

for ($i=1; $i<=14; $i++)
{
  if(in_array($i, $exclude)) continue;
?>
 <option value="<?php echo $i; ?>"><?php echo $i; ?></option>
<?php } ?> 

开始使用mysqli_ *函数。 mysql_ *函数已弃用。

答案 1 :(得分:1)

首先,您应该使用PHP PDO进行数据库交互,不推荐使用mysql_fetch_array。以下是PDO手册http://php.net/manual/en/book.pdo.php

的链接

见下面的回答:

<?php
$q = "SELECT * FROM rooms WHERE duration='first lecture' and day='Sunday'";
$stmt = $db_pdo->prepare($sql);
$stmt->execute();
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>

<select name="" id="">
    <?php
    for ($i = 1; $i <= 14; $i++):?>
        <?php $good_to_go = true; ?>
        <?php foreach ($data as $exclude): ?>
            <?php if ($exclude['name'] == $i): ?>
               <?php  $good_to_go = false;?>
            <?php endif; ?>
        <?php endforeach; ?>

        <?php if ($good_to_go): ?>
            <option value="<?php echo $i; ?>"><?php echo $i; ?></option>
        <?php endif; ?>
    <?php endfor; ?>
</select>