for循环从数组计数,限制输出? PHP

时间:2010-05-10 07:33:21

标签: php arrays loops for-loop

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,它会在这种情况下打印11次,即使只有数组1和2有数据。我该如何解决这个问题?

我的函数查询如下:

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));
        }

    }

3 个答案:

答案 0 :(得分:0)

据我所知,你的代码。

  1. $ news_comments应该是sql查询的数据结果。只是为了澄清限制10并不强制结果为10行。返回的行数取决于您的sql结果。

  2. 您正在使用 for($ i = 0; $ i

  3. 如果您想循环浏览所有$ news_comments,您可以执行

    foreach ($news_comments as $i=>$news_comment) {
      printf($news_comment);
    }
    

    $ news_comment将等于您的$ news_comments [$ i]

答案 1 :(得分:0)

MySQL的LIMIT就是这样;最高限额。它不会强制返回结果的数量。如果返回一个包含10个元素的数组,则selectQuery()函数的行为是错误的,无论找到的结果数是多少。我会修复这种行为,而不是解决它。

如果由于某种原因无法实现,您可以在for循环中添加条件:

for($i=0; $i<count($news_comments); $i++) 
{
    if( ! empty($news_comments[$i])
    {
        print '<tr>...</tr>'; 
    }
}

为了记录,我和DarkerStar在foreach上。在某些情况下需要传统的for循环,但是你的不是其中之一。

foreach($news_comment as $comment)
{
    echo $comment['comment'];
    echo $comment['comment_by'];
    echo $comment['comment_date'];
}

答案 2 :(得分:0)

从您的评论来看,我认为问题出在构建$news_comments数组的函数中,即它总是构建一个包含11个值的数组,关键是如果你不打印它们不添加外部内容,因为它只打印空行/单元格。如果只更改内部打印的内容,则循环不能执行不同的次数。

您应该发布selectQuery()功能。