【问题标题】:Building a html list of links with groups of sublists that are based on a common id使用基于公共 ID 的子列表组构建链接的 html 列表
【发布时间】:2014-06-23 18:43:21
【问题描述】:

我有什么:

我有一组链接及其元数据。
有些链接需要组合在一起,有些是常规链接。

我想要做什么:

我正在尝试遍历我的数组并将 li 与它们的相对 ul 分组,基于一个共同的 id。

问题:

  • 一个问题是仅根据所述 id 制作唯一的 ul,而不是为其迭代的每个项目制作 ul。
  • 第二个更困难的问题是在相对 ul 中对每个项目进行分组。

这是我必须使用的示例数组:

<?php
$array = array();

$array['page']['colours']['link'] = '/colours';
$array['page']['colours']['link-title'] = 'Colours';


$array['page']['colours']['subpage']['green']['aside']['link'] = '/colours/green';
$array['page']['colours']['subpage']['green']['aside']['link-title'] = 'Green';


$array['page']['colours']['subpage']['blue']['aside']['collapse']['id'] = 'cool-colours';
$array['page']['colours']['subpage']['blue']['aside']['link'] = '/colours/blue';
$array['page']['colours']['subpage']['blue']['aside']['link-title'] = 'Blue';

$array['page']['colours']['subpage']['purple']['aside']['collapse']['id'] = 'cool-colours';
$array['page']['colours']['subpage']['purple']['aside']['link'] = '/colours/purple';
$array['page']['colours']['subpage']['purple']['aside']['link-title'] = 'Purple';

$array['page']['colours']['subpage']['orange']['aside']['collapse']['id'] = 'bright-colours';
$array['page']['colours']['subpage']['orange']['aside']['link'] = '/colours/orange';
$array['page']['colours']['subpage']['orange']['aside']['link-title'] = 'Orange';

$array['page']['colours']['subpage']['yellow']['aside']['collapse']['id'] = 'bright-colours';
$array['page']['colours']['subpage']['yellow']['aside']['link'] = '/colours/yellow';
$array['page']['colours']['subpage']['yellow']['aside']['link-title'] = 'Yellow';

$array['page']['colours']['subpage']['red']['aside']['collapse']['id'] = 'bright-colours';
$array['page']['colours']['subpage']['red']['aside']['link'] = '/colours/red';
$array['page']['colours']['subpage']['red']['aside']['link-title'] = 'Red';


$array['page']['colours']['subpage']['pink']['aside']['collapse']['id'] = 'bright-colours';
$array['page']['colours']['subpage']['pink']['aside']['link'] = '/colours/pink';
$array['page']['colours']['subpage']['pink']['aside']['link-title'] = 'Pink';
?>

这是我目前用于迭代此数组的内容:

<aside id="sidebar">
  <?php
    if ( !empty( $array ) ) { ?>
    <ul class="menu">

      <?php foreach ( $array['page']['colours']['subpage'] as $subpage ) {
        if( !empty( $subpage['aside'] ) ) {
          $historyArray = array();
        ?>
          <li>
            <?php if( !empty( $subpage['aside']['collapse'] ) ) { ?>

              <?php if( !in_array( $subpage['aside']['collapse']['id'], $historyArray ) ) { ?>

                <a data-toggle="collapse" data-parent="#sidebar" href="#<?php echo $subpage['aside']['collapse']['id'] ?>" class="<?php echo $currentPageLink === $subpage['aside']['link'] ? 'active' : '' ?>"><?php echo $subpage['aside']['link-title'] ?></a>

                <ul id="<?php echo $subpage['aside']['collapse']['id'] ?>">
                  <li>

                    <a href="<?php echo $subpage['aside']['link'] ?>" class="<?php echo $currentPageLink === $subpage['aside']['link'] ? 'active' : '' ?>"><?php echo $subpage['aside']['link-title'] ?></a>

                  </li>
                </ul>

              <?php
                $historyArray[] = $subpage['aside']['collapse']['id'];
                }
              ?>
            <?php } else { ?>
              <a href="<?php echo $subpage['aside']['link'] ?>" class="<?php echo $currentPageLink === $subpage['aside']['link'] ? 'active' : '' ?>"><?php echo $subpage['aside']['link-title'] ?></a>
            <?php } ?>
          </li>
      <?php } } ?>

    </ul>
  <?php } ?>
</aside>

【问题讨论】:

    标签: php html arrays foreach collapse


    【解决方案1】:

    哇,现在这是一个令人困惑的数组!但一切都是可行的,对吧?这只是你愿意尝试什么的问题。 :)

    我认为您需要创建一个适合列表目的的新数组,然后迭代该列表(巨大的复杂数组将保持不变,无论它用于什么其他用途)。考虑一下:

    <?php
    if ( !empty( $array ) ) {
        //Create the new array $uls[id][color]['link'/'link-title']
        foreach ( $array['page']['colours']['subpage'] as $color => $subpage ) {
            $uls[$subpage['aside']['collapse']['id']][$color]['link'] = $subpage['aside']['link'];
            $uls[$subpage['aside']['collapse']['id']][$color]['link-title'] = $subpage['aside']['link-title'];
        }
    }
    if ( !empty( $uls ) ) {
        echo '<aside id="sidebar">';
        echo '<ul class="menu">';
        //iterate through the new $uls array
        foreach($uls as $id => $color) {
            //for each id, we create a ul, then iterate through that id's array
            echo '<li><ul id="' . $id . '">';
            foreach($color as $link_array) {
                //echo the list item for each link in the id
                $active = ($currentPageLink === $link_array['link']) ? 'active' : '';
                echo '<li><a href="' . $link_array['link'] . '" class="' . $active  . '">' . $link_array['link-title'] . '</a></li>';
            }
            echo '</ul></li>';
        }
        echo '</ul>';
        echo '</aside>';
    }
    ?>
    

    我没有添加的一件事是数据折叠链接。我不确定你到底要去那里做什么。不过,坚持下去应该不会太难。

    【讨论】:

    • 在我想在这里问之前,我得出了与您建议的相同的结论。我很高兴这不是太牵强,我不是唯一一个想到它的人。我不得不做一些调整,因为你没有考虑到没有崩溃的 li。我刚刚创建了一个索引数组并通过为每个折叠/ul/分组使用一个新索引来管理索引。这不是一个理想的解决方案,但它确实有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多