我在PHP应用程序中有以下HTML,其中包含一个包含Group和Items的数组。首先,我想按组对它们进行排序,然后在组中将项目分隔为逗号(Item1,Item2,Item3),而不使用逗号结尾。
<dl>
<?php $groupname = '' ?>
<?php foreach ($product['product_filters'] as $product_filter) { ?>
<?php if ($groupname != $product_filter['group']) { ?>
<?php $groupname = $product_filter['group']; ?>
<?php echo '<dd>' . $product_filter['group'] . '</dd>'; ?>
<?php } ?>
<dt>
<?php echo $product_filter['name']; ?>
</dt>
<?php } ?>
</dl>
我希望得到以下结果,但我不知道如何管理它以及我应该使用哪个循环:
Group 1
G1_Item_1, G1_Item_2
Group 2
G2_Item_1, G2_Item_2, G2_Item_3
答案 0 :(得分:1)
您可以使用两个循环:一个用于将数据重组为组,另一个用于以所需格式输出数据。请注意,您使用了相反意义上的<dt>
和<dd>
:组是标题,因此请使用<dt>
。
此外,如果您不打开和关闭每一行的php
标记,您的代码就会变得更具可读性。尝试制作没有这种中断的代码块:它会使它更具可读性。
以下是建议的代码:
<?php
// Create a new structure ($groups): one entry per group, keyed by group name
// with as value the array of names:
foreach ($product['product_filters'] as $product_filter) {
$groups[$product_filter['group']][] = $product_filter['name'];
}
// Sort it by group name (the key)
ksort($groups);
// Print the new structure, using implode to comma-separate the names
foreach ($groups as $group => $names) {
echo "<dt>$group</dt><dd>" . implode(', ', $names) . "</dd>";
}
?>
在eval.in上看到它。