在foreach中将某些结果添加到共享容器元素中

时间:2013-11-15 16:17:56

标签: php

我正在努力用语言表达这个问题,但希望我能证明这一点:

我希望将foreach循环中的某些结果组合在前端的容器中。

所以,例如,如果我有一个foreach循环运行汽车名称和颜色数组:

foreach($cars as $car){
 echo '<h1>'.$car->name.'</h1>';
 echo '<p>'.$car->colour.'</p><br/>';
}

它可能会给我:

<h1>Car1</h1>
<p>Blue</p><br/>

<h1>Car2</h1>
<p>Blue</p><br/>

<h1>Car3</h1>
<p>Red</p><br/>

但是我需要将具有相同颜色的结果分组到容器div中,因此输出如下:

<div class="blue">
 <h1>Car1</h1>
 <p>Blue</p><br/>

 <h1>Car2</h1>
 <p>Blue</p><br/>
</div>

<h1>Car3</h1>
<p>Red</p><br/>

因为容器div在技术上不在每个循环之外,所以我不知道如何在不使用前端脚本(即javascript)的情况下将其放入其中,但我希望有一种方法......任何想法?甚至可能是一种识别类型的第一种类型和类型的最后一种方式的方法 - 但这是我能够接近理论的最接近的方法,让一个孤独的解决方案。

编辑:似乎对这个问题存在一些误解。我并不打算在foreach中编写程序,只需“包装”预先分组的项目。

1 个答案:

答案 0 :(得分:0)

使用多维数组构建数据结构,然后遍历数组以显示输出。

这样的事情:

$mycars = array();
foreach($cars as $car){
    $mycars[$car->colour][] = $car;
}

现在你有一个如下所示的数组:

Array
(
    [Blue] => Array
        (
            [0] => {Car1Object}
            [1] => {Car2Object}
        )

    [Red] => Array
        (
            [0] => {Car3Object}
        )

)

现在遍历该数组以显示输出:

foreach($mycars as $colour => $cars) {
    echo "<div class='$colour'>";
    foreach($cars as $car) {
        echo "<h1>{$car->name}</h1>";
        echo "<p>{$car->colour}</p>";
    }
    echo "</div>";
}

你得到......

<div class='Blue'>
    <h1>Car1</h1>
    <p>Blue</p>
    <h1>Car2</h1>
    <p>Blue</p>
</div>
<div class='Red'>
    <h1>Car3</h1>
    <p>Red</p>
</div>