php - 如何在 while 循环中对项目进行分组?

标签 php mysql pdo

我试图在 PHP 中对 while 循环的输出进行分组。

我想要实现的是,我希望将具有相同“exposure”的每个“框”组合在一起,然后每当一个新框具有一个新的“exposure' 来了,应该出现一个换行符,下一组曝光应该分组。

目前,我有这个 PHP 代码:

//Select from advertisements.   
global $dbh;
$r = $dbh->prepare("
SELECT * FROM advertisements 
WHERE exposure!='0' 
AND `status`='2' 
AND (clicks_left_micro>0 
OR clicks_left_mini>0 
OR clicks_left_standard>0 
OR clicks_left_extended>0 
OR fixed='1') 

ORDER BY exposure DESC, fixed DESC");
$r->execute();

$last = null;
while($row=$r->fetch(PDO::FETCH_ASSOC)){

    $exposure = $row['exposure'];
    switch ($exposure) {
        case 1:
            $type = "";
            break;
        case 2:
            $type = "ads-orange";
            break;
        case 3:
            $type = "ads-green";
            break;
        case 4:
            $type = "ads-blue";
            break;
    }

    if ($row['token'] != $last) {
        echo '

            <a href="#">
                <div class="col-xs-4 ads-box '.$type.'">
                    <div class="title">'.$row['title'].'</div>
                    <div class="content">'.$row['description'].'</div>
                </div>      
             </a>
        ';
        $last = $row['token'];
    }

}

上面的代码,会像这样打印出来:

https://docs.google.com/file/d/0Bw9EQNU6ms6jUXVyY1pndVlpY2c/edit?usp=drivesdk

虽然,我想要的是这样的:

https://docs.google.com/file/d/0Bw9EQNU6ms6jU0JYaDlHWEZsN1k/edit?usp=drivesdk

我怎样才能做到这一点?

最佳答案

我会制作一个包含所有“曝光”的数组。

$dataArray = array();
foreach ($result as $value){
    $dataArray[$value['exposure']][] = $value;
}

这将生成一个数组($dataArray),其中包含您在各自索引中的所有曝光类别。

现在您可以遍历每个“曝光”:

foreach ($dataArray as $exposure => $value){

    echo 'Exposure: '.$exposure.'<br/>';
    foreach ($value as $item){
        // Any item information here.
    }
    echo '<hr>';
}

关于php - 如何在 while 循环中对项目进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20395034/

相关文章:

php - 通过 mysql 上的变量发送 "null"不会删除该行

php - pdo_odbc的配置需要文件在/usr/local/但是没有文件

php - 用 PHP 读取二进制文件

php - mysql 查询中的 where 和havingpriority

PHP Desktop 在 AJAX CALL 上没有响应

mysql - 如何使用另一个数据库的数据更新 MySQL 数据库?

mysql - mysql查询返回受WHERE子句限制的内连接数

php - 使用 PHP DOM 输出 HTML

mysql - 在一个表中使用 2 个外键是否可以,其中一个必须为空?

php - PDOException SQLSTATE [42000] : Syntax error or access violation: 1064