<!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之间的数字,除了检索到的值。
我尝试了很多次并且我成功了,但是第一次循环消除了第一次检索,第二次消除了第二次检索到的值。
有没有办法一次消除这两种情况?
答案 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>