我有以下代码来获取我的所有过滤器元素,并使用Title(getName)及其内部元素(getHtml)回显它们。我想要的是检查标题并合并相同的标题以显示所有内部元素,而不重复相同的标题。
例如,如果我有一个名为FILTER-AB的过滤器,其元素为1和2,另一个过滤器也名为FILTER-AB,其元素为3和4,我想回显一个标题为FILTER-AB且内部的表元素1,2,3和4. 请参阅下面的简单示例
编辑例如,HTML元素是一个元素列表,这些元素在这里并不重要。过滤器名称由第三行的“getName”方法(当时写为dt类)获取,元素由第7行的“getHtml”方法获取(然后写为内部Html元素dd类)
我想不出任何方法可以做到这一点,欢迎任何帮助或指导!
<?php foreach ($_filters as $_filter): ?>
<?php if($_filter->getItemsCount()): ?>
<dt><?php echo $this->__($_filter->getName()) ?></dt>
(Not important line) <?php if($_searchFilter !== false): ?>
(Not important line) <dt class="attribute_value_search_box<?php if($_searchFilter !== true): ?> enabled<?php endif; ?>"><input type="text" placeholder="<?php echo $this->__('Search for option'); ?>" /></dt>
(Not important line) <?php endif;?>
<dd><?php echo $_filter->getHtml() ?></dd>
<?php endif; ?>
<?php endforeach; ?>
示例(我现在拥有的)
<dt class="even">Brand</dt>
<dd class="even">
<li>
Element 1
</li>
</dd>
<dt class="odd">Brand</dt>
<dd class="odd">
<li>
Element 2
</li>
</dd>
<dt class="even">Type</dt>
<dd class="even">
<li>
Element 3
</li>
</dd>
结果预期
<dt class="even">Brand</dt>
<dd class="even">
<li>
Element 1
</li>
<li>
Element 2
</li>
</dd>
<dt class="odd">Type</dt>
<dd class="odd">
<li>
Element 3
</li>
</dd>
答案 0 :(得分:0)
使用name
作为键将数据映射到分组的数组数组。然后迭代该数组以生成html
类似的东西:
<?php
$data = array();
foreach ($_filters as $_filter) {
if ($_filter->getItemsCount()) {
$name = $this->$_filter->getName();
$data[$name][] = $_filter->getHtml();
}
?>
<?php foreach ($data as $name => $items): ?>
<dl>
<dt><?php echo $name ?>
<dl>
<dt class="attribute_value_search_box<?php if ($_searchFilter !== true): ?> enabled<?php endif; ?>">
<input type="text" placeholder="<?php echo $this->__('Search for option'); ?>">
</dt>
<?php foreach ($items as $html): ?>
<dd><?php echo $html ?></dd>
<?php endforeach; ?>
</dl>
</dt>
</dl>
<?php endforeach; ?>