[英]for loop with count from array, limit output? PHP
print '<div id="wrap">';
print "<table width=\"100%\" border=\"0\" align=\"center\" cellpadding=\"3\" cellspacing=\"3\">";
for($i=0; $i<count($news_comments); $i++)
{
print '
<tr>
<td width="30%"><strong>'.$news_comments[$i]['comment_by'].'</strong></td>
<td width="70%">'.$news_comments[$i]['comment_date'].'</td>
</tr>
<tr>
<td></td>
<td>'.$news_comments[$i]['comment'].'</td>
</tr>
';
}
print '</table></div>';
$ news_comments是從其他地方的函數返回的mysqli_fetch_assoc的3維數組,由於某種原因,我的for循環返回了數組集的總數,例如[0] [2]等,直到達到計數的$ news_comments var中的最大值為止。是LIMIT 10的返回函數。我的問題是,如果我在for循環內添加任何text / html / icons,即使只有數組集1和2里面都有數據,在這種情況下它也會打印11次。 我該如何解決?
我的函數查詢如下:
function news_comments()
{
require_once '../data/queries.php';
// get newsID from the url
$urlID = $_GET['news_id'];
// run our query for newsID information
$news_comments = selectQuery('*', 'news_comments', 'WHERE news_id='.$urlID.'', 'ORDER BY comment_date', 'DESC', '10'); // requires 6 params
// check query for results
if(!$news_comments)
{
// loop error session and initiate var
foreach($_SESSION['errors'] as $error=>$err)
{
print htmlentities($err) . 'for News Comments, be the first to leave a comment!';
}
}
else
{
print '<div id="wrap">';
print "<table width=\"100%\" border=\"0\" align=\"center\" cellpadding=\"3\" cellspacing=\"3\">";
for($i=0; $i<count($news_comments); $i++)
{
print '
<tr>
<td width="30%"><strong>'.$news_comments[$i]['comment_by'].'</strong></td>
<td width="70%">'.$news_comments[$i]['comment_date'].'</td>
</tr>
<tr>
<td></td>
<td>'.$news_comments[$i]['comment'].'</td>
</tr>
';
}
print '</table></div>';
}
}// End function
任何幫助是極大的贊賞。
編輯:這是我對kemp和其他人的selectQuery(),也許可以修復它一點,它仍然是一個WIP,所以它不完整。
$_SESSION['errors'] = array();
function selectQuery($select, $tbl, $where, $order, $scroll, $limit)
{
global $mysqli;
require_once '../config/mysqli.php';
$query = "SELECT $select FROM $tbl $where $order $scroll LIMIT $limit";
if($result = mysqli_query($mysqli, $query))
{
$num = mysqli_num_rows($result);
if(!$num > 0)
{
array_push($_SESSION['errors'], 'No Results found : ');
}
else
{
for($i=0; $i<=$limit; $i++)
{
$data[$i] = mysqli_fetch_assoc($result);
}
return $data;
mysqli_free_result($result);
}
}
else
{
print('Error: ' . mysqli_error($mysqli));
}
}
據您的代碼了解。
$ news_comments應該是您的sql查詢的數據結果。 僅闡明限制10並不強制結果為10行。 返回的行數取決於您的sql結果。
您正在使用for($ i = 0; $ i
如果要遍歷所有$ news_comments,則可以執行以下操作
foreach ($news_comments as $i=>$news_comment) {
printf($news_comment);
}
$ news_comment等於您的$ news_comments [$ i]
MySQL的限制就是這樣; 最高限額。 它不強制返回的結果數。 如果selectQuery()函數返回一個包含10個元素的數組,則無論找到的結果數量如何,該行為都是錯誤的。 我會解決此問題,而不是解決它。
如果由於某種原因無法實現,則可以在for循環中添加條件:
for($i=0; $i<count($news_comments); $i++)
{
if( ! empty($news_comments[$i])
{
print '<tr>...</tr>';
}
}
記錄下來,我和DarkerStar在一起。 在某些情況下,需要傳統的for循環,但您的情況並非其中之一。
foreach($news_comment as $comment)
{
echo $comment['comment'];
echo $comment['comment_by'];
echo $comment['comment_date'];
}
從您的評論來看,我相信問題出在構建$news_comments
數組的函數中,即,它始終會構建一個包含11個值的數組,而要點是,如果不添加外部內容,您將看不到它們的打印內容。 ,因為它只打印空行/單元格。 如果僅更改循環內部打印的內容,則循環不能執行不同的次數。
您應該發布selectQuery()
函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.