Php 将foreach中的某些结果添加到共享容器元素
我很难说出这个问题,但希望我能证明: 我希望foreach循环中的某些结果被分组在前端的容器中 例如,如果我有一个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($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
。顺便说一句,我最关心的是它可能如何影响结果的顺序,因为数据库的订单输出是在查询级别精心编排的。这是没有根据的担忧吗?