簡體   English   中英

從數組計數循環,限制輸出? 的PHP

[英]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));
        }

    }

據您的代碼了解。

  1. $ news_comments應該是您的sql查詢的數據結果。 僅闡明限制10並不強制結果為10行。 返回的行數取決於您的sql結果。

  2. 您正在使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM