Php 如何对输出进行分类

Php 如何对输出进行分类,php,mysql,loops,if-statement,foreach,Php,Mysql,Loops,If Statement,Foreach,我想对我的产出进行分类,因为目前的结果对我来说不是最好的 Mysql表: DATE TITLE CAT 2012-11-23 | Liverpool - Man City | 2 2012-11-23 | Arsenal - Swansea | 2 2012-11-24 | Bolton - Fulham | 3 2012-11-23 | Nagoya - Kashima | 4 20

我想对我的产出进行分类,因为目前的结果对我来说不是最好的

Mysql表:

DATE         TITLE                  CAT     

2012-11-23 | Liverpool - Man City |  2     
2012-11-23 | Arsenal - Swansea    |  2 
2012-11-24 | Bolton - Fulham      |  3  
2012-11-23 | Nagoya - Kashima     |  4 
2012-11-23 | Kawasaki - Tokyo     |  4 
2012-11-24 | Real Madrid - Elche  |  6
我当前的代码:

<?php

$today = date('d');   
$field = 0;

foreach($data['posts'] as $p)
{

if (new DateTime() <= new DateTime("$p->date")) 
{

$originalDate = "$p->date";
$newDate = date("H:i", strtotime($originalDate));

    if ($field % 3 == 0) echo "<div class=\"row\">"; // start line before field 0 .. 3 .. 6 etc.

    echo " <div class=\"col-md-4 portfolio-item\">

<h3><small><a href=\"".Url::post($p->id)."\">".$p->country.", ".Categories::name($p->cat)." - $newDate</small><br><h2><center><b>$p->title</b></center></h2> </a>
            </h3> 

</div>";

 // output as table cell
    if ($field % 3 == 2) echo "</div>"; // end line alter field 2 .. 5 .. 8 etc.
    $field++; // increase field counter
}
}

if ($field % 3 != 0) echo "</div>"; // close last line, unless total count was multiple of 3

?>
我想得到这样的结果:(每行3个项目,如果类别id改变,那么开始一个新行)


我希望有人能帮我,因为我尝试了很多变化,但没有成功。非常感谢

我试图让你表现出你的需要

  • 您可以按行设置项目数(当前为3)
  • 您必须将此代码与结果查询相链接
  • 如果查询结果不同-->修改$row[编号]


您在哪里查询Mysql表?在其他php文件中,这只是输出文件。如果类别更改,我只需修改代码以开始新行,并在类别更改后添加类别id(仅一次)。只是想指出,如果我们不知道$data中的内容,则此代码不太相关-我想国家是标题。$data['posts']=Db::result(sprintf(“从
posts
中选择*”,其中
类型
='post'和
状态
='1'按月(日期)、月(日期)排序),
country
ASC,
cat
ASC,
date
ASC限额%d,%d“,$offset,$data['max']);还有一个问题:如果每个类别有5个或8个项目,并且我只想显示一次类别,我如何修改您的代码。因为如果您添加另外4个具有相同类别的项目,则每行中显示的类别如下:类别2
项目1项目2项目3
项目4项目5项目6
项目7 I-I-感谢您的帮助。更新后的代码出现了一些问题,因为它显示的是一个空页面。您的第一个版本显示良好,没有错误。在else之后缺少1个大括号-我意外删除了它--
Cat 2 Liverpool - Man City  | Cat 2 Arsenal - Swansea | Cat 3  Bolton - Fulham
Cat 4 Nagoya - Kashima |  Cat 4 Kawasaki - Tokyo |  Cat 6 Real Madrid - Elche
Cat 2
------

Liverpool - Man City   |  Arsenal - Swansea  | -

Cat 3
------

Bolton - Fulham  |  -    |  - 

Cat 4
------

Nagoya - Kashima | Kawasaki - Tokyo |  -  

Cat 6
------

Real Madrid - Elche |   -    |   - 
$array_test = array( array("2012-11-23", "Liverpool - Man City",  2),     
 array("2012-11-23", "Arsenal - Swansea",  2), 
 array("2012-11-23", "Arsenal - Swansea",  2),
 array("2012-11-23", "Arsenal - Swansea",  2), 
 array("2012-11-24", "Bolton - Fulham",  3), 
 array("2012-11-23", "Nagoya - Kashima",  4), 
 array("2012-11-23", "Kawasaki - Tokyo",  4), 
 array("2012-11-24", "Real Madrid - Elche",  6));

$current_cat = 0;
$max_item_by_row = 3;
$curr_nb_item = 0;

foreach($array_test as $row)
{
if(($curr_nb_item % $max_item_by_row) == 0)
{
// Case : new cat & 3 lines where displayed
// EDITED here
if($current_cat != $row[2])
{
    $current_cat = $row[2];
    echo "<br>" . "<br>" . "Cat " . $row[2] . "<br>" . "------" . "<br>" . "<br>";
    echo $row[1] . "  |  ";
    ++$curr_nb_item;    
}
// EDIT : else block added
// Case : same Cat & nb item by row reached
else
{
    echo "<br>" . "<br>" . $row[1] . "  |  ";
    ++$curr_nb_item;    
}
// EDIT : Missing this brace :(
}
else
{
    // Case : New cat BUT incomplete curr line - Fill with " -  | "
    if($current_cat != $row[2])
    {
        $current_cat = $row[2];

        while((($curr_nb_item + 1) % $max_item_by_row) != 0)
        {
            //echo " value : " . $curr_nb_item;
            echo "- | ";
            ++$curr_nb_item;
        }
        // Reset curr_nb_item - Otherwise misscount to fill next incomplete lines
        $curr_nb_item = 0;
        echo "-";

        // Display New Cat
        echo "<br>" . "<br>" . "Cat " . $row[2] . "<br>" . "------" . "<br>" . "<br>";
        echo $row[1] . "  |  ";
        ++$curr_nb_item;

    }

    // Case : same cat + curr_nb_item < 3 - Standard display
    else
    {
        echo $row[1] . "  |  ";
        ++$curr_nb_item;
    }
}
}
?>
Liverpool - Man City | Arsenal - Swansea | Arsenal - Swansea |

Arsenal - Swansea | - | -

Cat 3
------

Bolton - Fulham | - | -

Cat 4
------

Nagoya - Kashima | Kawasaki - Tokyo | -

Cat 6
------

Real Madrid - Elche |