匹配数组中具有相同名称的元素

时间:2017-11-23 17:15:31

标签: javascript php jquery html magento

我有以下代码来获取我的所有过滤器元素,并使用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>

1 个答案:

答案 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; ?>