foreach循环工作,但不做

时间:2014-04-23 10:27:39

标签: php pdo foreach while-loop

通常id为此使用foreach。但我也需要每次旋转时增加1的东西。这就是我使用while循环的原因。但我无法让它工作。 foreach循环工作正常。但是当我应用while循环时它不会做任何事情,或只是创建无限量的行显示。所以我正在寻求一些帮助。可能是一个非常简单的解决方案,但我无法看到它。

$SQL = $pdo->prepare("SELECT id, title, img_src, rating FROM movie_db ORDER BY RAND() LIMIT 3");
$SQL->execute();
$r = $SQL->fetchAll(PDO::FETCH_ASSOC);
//while($r = $row){
foreach($r as $row){


//$result = mysql_query($query, $connection) or die (mysql_error());

$i = 1;
//while ($row = mysql_fetch_array($result)) {
$id = $row['id'];
$title = $row['title'];
$img_src = $row['img_src'];
$rating = $row['rating'];


                    if ($i<=2){echo"<div class='featured_post left'>";}
                    elseif ($i=3){echo"<div class='featured_post left featured_post_last'>";}
                    $i++;

我也尝试使用do-while循环,但后来我根本无法显示结果,但它至少使用了正确的代码。

2 个答案:

答案 0 :(得分:0)

elseif ($i=3)应该是elseif ($i==3)

            if ($i<=2){echo"<div class='featured_post left'>";}
            elseif ($i==3){echo"<div class='featured_post left featured_post_last'>";}
            $i++;

答案 1 :(得分:0)

ORDER BY RAND()效率不高。我建议改为:

$qry = $pdo->query('
  SELECT id, title, img_src, rating, @lim := @lim - 1
  FROM   movie_db, (SELECT @cnt := COUNT(*)+1, @lim := 3 FROM movie_db) init
  WHERE  RAND() < @lim / (@cnt := @cnt - 1)
  LIMIT  3
');

至于你的问题:

for($i = 1; $row = $qry->fetch(); $i = $i<2 ? $i+1 : 0) {
  $id = $row['id'];
  $title = $row['title'];
  $img_src = $row['img_src'];
  $rating = $row['rating'];

  echo '<div class="featured_post left', ($i ? '' : ' featured_post_last'), '">';
}