![](/img/trans.png)
[英]php array() w/ foreach only loops if using .= to build the result
[英]php foreach() w/ MySQL WHERE w/ while{} returning only the last array() item
我的結果是吐出每條記錄的副本,而不是唯一的 foreach 匹配。 如您所見,我正在嘗試遍歷並獲取每個唯一值WHERE $s=id .. 我知道查詢需要在while()內,
數組 $seminar 從我的表單上的復選框傳遞。
if ($seminar) {
foreach ($seminar as $s)
$interest .= "$s ";
}
注意: $interest是我用來插入我的表的(它不是這個問題的一部分)
對於數組數據,這是$seminar返回的內容
Array
(
[0] => 1
[1] => 8
[2] => 9
[3] => 10
[4] => 13
)
這是我的代碼:
$query_seminars = mysql_query("SELECT id, name, UNIX_TIMESTAMP(moment) FROM seminars WHERE id={$s}");
while ($sem_row = mysql_fetch_assoc($query_seminars))
{
$names .= "-- " . $sem_row['id'] . " " . $sem_row['name'] . date('D, F j, Y, g:i a', $sem_row['moment']) . "<br />";
}
您不需要 while 循環中的 foreach ,這里:
$query_seminars = mysql_query("SELECT id, name, UNIX_TIMESTAMP(moment) FROM seminars WHERE id={$s}");
while ($sem_row = mysql_fetch_assoc($query_seminars))
{
$names .= "-- " . $sem_row['id'] . " " . $sem_row['name'] . date('D, F j, Y, g:i a', $sem_row['moment']) . "<br />";
}
還要使用命名索引,您使用mysql_fetch_assoc
,而不是mysql_fetch_array
。 (已經在上面的代碼中)
問題不在於 MySql 正在返回重復(實際上是一式三份)項目。 正如其他人指出的那樣,問題在於您正在使用foreach
遍歷每條記錄。
與 MySql 一起使用的一種常用習語是:
$sql = "SELECT id, name, UNIX_TIMESTAMP(moment) FROM seminars WHERE $s=id";
if ($q = mysql_query($sql)) {
while ($f = mysql_fetch_assoc($q)) {
//($f is an associative array of the record value,
//with keys for each field)
//... do something with $f
echo "--" . htmlspecialchars($f['name'])
. date('D, F j, Y, g:i a', $f['moment'])
. "<br /><br />";
}
} elseif ($e = mysql_error()) {
//do something with the error message
//...
}
您看到“重復”是因為您在 while 循環中使用foreach
來迭代返回記錄的每個字段。 由於您的查詢返回每個包含三個字段( id 、 name和moment )的記錄,因此您將處理每條記錄三次。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.