匹配数组中具有相同名称的元素
Match elements with same name inside an array
我有以下代码获取我的所有过滤器元素并用标题 (getName) 及其内部元素 (getHtml) 回显每个元素。我想要的是检查标题并合并相同的标题以将所有内部元素显示在一起而不重复相同的标题。
例如,如果我有一个名为 FILTER-AB 且包含元素 1 和 2 的过滤器,以及另一个名为 FILTER-AB 且包含元素 3 和 4 的过滤器,我只想回显一个 table 带有标题 FILTER-AB 和内部元素 1、2、3 和 4。请参阅下面更简单的示例
EDIT 例如,HTML 元素是一个元素列表,这些元素在这里不是很重要。过滤器名称由第三行的 "getName" 方法获取(然后写为 dt class),元素由第 7 行的 "getHtml" 方法获取(然后写为 inner Html 元素 dd class)
我想不出有什么方法可以做到这一点,请提供任何帮助或指导!
<?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>
使用 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; ?>
我有以下代码获取我的所有过滤器元素并用标题 (getName) 及其内部元素 (getHtml) 回显每个元素。我想要的是检查标题并合并相同的标题以将所有内部元素显示在一起而不重复相同的标题。
例如,如果我有一个名为 FILTER-AB 且包含元素 1 和 2 的过滤器,以及另一个名为 FILTER-AB 且包含元素 3 和 4 的过滤器,我只想回显一个 table 带有标题 FILTER-AB 和内部元素 1、2、3 和 4。请参阅下面更简单的示例
EDIT 例如,HTML 元素是一个元素列表,这些元素在这里不是很重要。过滤器名称由第三行的 "getName" 方法获取(然后写为 dt class),元素由第 7 行的 "getHtml" 方法获取(然后写为 inner Html 元素 dd class)
我想不出有什么方法可以做到这一点,请提供任何帮助或指导!
<?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>
使用 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; ?>