Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将foreach中的某些结果添加到共享容器元素_Php - Fatal编程技术网

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

Php 将foreach中的某些结果添加到共享容器元素,php,Php,我很难说出这个问题,但希望我能证明: 我希望foreach循环中的某些结果被分组在前端的容器中 例如,如果我有一个foreach循环,它遍历一系列汽车名称和颜色: foreach($cars as $car){ echo '<h1>'.$car->name.'</h1>'; echo '<p>'.$car->colour.'</p><br/>'; } foreach($cars作为$car){ 回显“.$car->na

我很难说出这个问题,但希望我能证明:

我希望foreach循环中的某些结果被分组在前端的容器中

例如,如果我有一个foreach循环,它遍历一系列汽车名称和颜色:

foreach($cars as $car){
 echo '<h1>'.$car->name.'</h1>';
 echo '<p>'.$car->colour.'</p><br/>';
}
foreach($cars作为$car){
回显“.$car->name.”;
回声“”.$car->color.“


”; }
它可能会给我:

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

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

<h1>Car3</h1>
<p>Red</p><br/>
Car1
蓝色


Car2 蓝色


Car3 红色


但是,我需要将具有相同颜色的结果分组到容器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/>

Car1
蓝色


Car2 蓝色


Car3 红色


因为container div在技术上是在每个循环之外的,所以我不确定如何在不使用前端脚本(即javascript)的情况下将其放入其中,但我希望有一种方法……有什么想法吗?甚至可能是一种识别第一个类型和最后一个类型的方法——但这是我能找到的最接近理论的方法,让我们单独讨论一个解决方案


编辑:看来在这个问题上有一些误解。我不希望在foreach中以编程方式分组,只需“包装”预先分组的项。

使用多维数组来构建数据结构,然后在数组中循环以显示输出

大概是这样的:

$mycars = array();
foreach($cars as $car){
    $mycars[$car->colour][] = $car;
}
Array
(
    [Blue] => Array
        (
            [0] => {Car1Object}
            [1] => {Car2Object}
        )

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

)
现在您有了一个如下所示的数组:

$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>";
}
foreach($mycars as$color=>$cars){
回声“;
foreach($cars作为$car){
回显“{$car->name}”;
回声“{$car->color}

”; } 回声“; }
你会得到

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

Car1
蓝色的

Car2 蓝色的

Car3 红色的


您是否有预定义的颜色列表(例如,只有蓝色、红色和黄色)或它可以是任何颜色?我可能因为过分简化示例数据而伤了自己的脚-但简而言之,它可以是任何颜色。嗯-我感觉这不适用于我的实际数据集,即使它是;这是一个基于我的(可能过于简单化了)例子的很好的答案。我必须仔细检查一下。然后让我们知道您的实际数据集与您的示例有何不同。上面的代码允许任何数量的汽车或颜色,没有任何是预定义的。我可能只是发布真实的数据集。然而,主要的区别在于,不仅仅是名字和颜色;每个结果都有一套完整的数据,因此按照上面的例子,可能还会有一个制造商、年份、以前车主的名单(单独的对象)等。但这并不是说你的答案不适用-它看起来非常积极,可能会起到作用。好的,请看我更新的答案,特别是
$mycars[$car->color][=$car
将整个
$car
对象粘贴到数组中,这样当您在数组中循环以显示输出时,您可以访问任何属性,如
$car->manufacturer
。顺便说一句,我最关心的是它可能如何影响结果的顺序,因为数据库的订单输出是在查询级别精心编排的。这是没有根据的担忧吗?