0

所以我正在尝试为约会网站处理礼物。您可以拥有的最大礼物是 9,并且必须返回 9 个礼物跨度,无论是对于拥有 9 个礼物的用户,所有 9 个都是从数据库返回的,还是从数据库返回 4 个,其余 5 个从 for 循环返回,或者0 来自 db 和所有 9 来自 for 循环。查询 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 次,而不管从数据库输出了多少礼物?

4

1 回答 1

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>';

任务完成。

看到它工作

于 2012-09-21T16:55:23.247 回答