而/ For Loop Mixing输出确切数量的礼物

时间:2012-09-21 16:35:22

标签: php loops for-loop while-loop modulus

所以我正在尝试为约会网站处理礼物。您可以拥有的最大礼品数量为9,并且必须返回9个礼品范围,无论是从具有9个礼品的用户的数据库返回所有9个礼品,还是从数据库返回4个,以及从for循环返回剩余的5个礼品范围,或者来自db的0和来自for循环的所有9。查询mysql数据库并使用while循环输出用户拥有的礼物,而for循环则确保返回9个礼物总数,具体取决于while循环的输出(这当前未正确换行):

$i=0;
while($row = $user_gifts->fetch(PDO::FETCH_ASSOC)){
    $i++;   
    $gift_name = $row["gift_name"];

    if ($i%3==1) {
      $gifts_show .= '<div>';
    }
    $gifts_show .= '<span>'.$gift_name.'</span>';   
}


    if($i<1){ //0 gifts from db, all 9 no gifts
       $i=0;
       for ($i = $i; $i < 9; $i++) {
            if ($i%3==1) $gifts_show .= '<div>';    
                $gifts_show .= '<span>No Gift.</span>';
            if ($i%3==0) $gifts_show .= '</div>';
       }
    } else { //1+ gifts from db, mix gifts with no gifts until 9 are reached
       for ($i = $i; $i < 9; $i++) {
                $gifts_show .= '<span>No Gift.</span>';
            if ($i%3==0) $gifts_show .= '</div>';
       }
    }

每3件礼物应该用div包装。因此包含在3个div中的9个礼物的输出应如下所示:

<div>
  <span>DB Gift 1</span> 
  <span>DB Gift 2</span> 
  <span>DB Gift 3</span> 
</div>
<div>
  <span>DB Gift 4</span> 
  <span>No Gift</span> 
  <span>No Gift</span> 
</div>
<div>
  <span>No Gift</span> 
  <span>No Gift</span> 
  <span>No Gift</span> 
</div>

无论数据库输出多少礼物,都知道如何正确输出和包装div中的每3个跨度3次?

1 个答案:

答案 0 :(得分:2)

这就是简单的数组操作。

让我们假设我有以下数组:

$array = array(
    'DB Gift 1',
    'DB Gift 2',
    'DB Gift 3',
    'DB Gift 4'
);

...但我想展示9个元素。首先,我用“空”元素填充它:

$array = array_pad($array, 9, 'No Gift');

...我希望在3个3块中显示它。所以我把它分成3个块:

$array = array_chunk($array, 3);

......现在只是将它们加在一起的简单案例。首先,我加入所有内在元素:

foreach ($array as &$block) {
    $block = '<span>'.implode('</span><span>', $block).'</span>';
}

...然后我加入外部元素:

$result = '<div>'.implode('</div><div>', $array).'</div>';

完成工作。

See it working