【问题标题】:PHP looping array and make <ul> issuePHP循环数组并制作<ul>问题
【发布时间】:2021-10-04 19:56:20
【问题描述】:

从这个 php 数组中输出如下:

$data[$parent][] = ['id'=>$id, 'pageName'=>$pageName];

[1] => Array
    (
      [0] => Array
          (
              [id] => 2
              [pageName] => #
          )

      [1] => Array
          (
              [id] => 8
              [pageName] => #
          )
    )

[2] => Array
    (
      [0] => Array
          (
              [id] => 3
              [pageName] => item-add-new
          )

      [1] => Array
          (
              [id] => 4
              [pageName] => item-view
          )
    )

[8] => Array
    (
      [0] => Array
          (
              [id] => 9
              [pageName] => purchase-add-new
          )

      [1] => Array
          (
              [id] => 10
              [pageName] => purchase-view
          )
    )

循环这个数组,我只需要如下创建一个&lt;ul&gt;

<ul>
  <li class='nav-item active'>
    <a href='#' class='nav-link'>Page Name</a>
    <ul class='submenu-inner'>
      <li><a href='#' class='nav-link'>Sup Page Name</a></li>                               
      <li><a href='#' class='nav-link'>Sup Page Name</a></li>                               
    </ul>
  </li>   

  <li class='nav-item'>
    <a href='#' class='nav-link'>Page Name</a>
    <ul class='submenu-inner'>
      <li><a href='#' class='nav-link'>Sup Page Name</a></li>                               
      <li><a href='#' class='nav-link'>Sup Page Name</a></li>                               
    </ul>
  </li> 
</ul>

我的问题是,在循环数组时,我需要将 css 类 [.active] 添加到父 &lt;li&gt; 以使其处于活动状态。添加时需要比较数组中的pageName和打开页面名称的值变量。

例如:$p = "item-add-new";

这就是我尝试过的方法,从这段代码中我可以得到我的&lt;ul&gt;,但是,我不能将.active css 类放到父级&lt;li&gt;

foreach ($data[1] as $main) {
    $sel1 = $p == $main['pageName'] ? 'nav-item active' : 'nav-item'; 
    $menuHtml .=  "<li class='$sel1'>
                      <a href='#' class='nav-link'>Page Name</a>
                      <ul class='submenu-inner'>";
        foreach ($data[$main['id']] as $sub) {
            $menuHtml .=  "<li><a href='$sub[pageName]' class='nav-link'>Sup Page Name</a></li>";
        }        
    
        $menuHtml .= "  </ul>
                     </li>";
}

希望有人可以指导我正确的方向。谢谢。

【问题讨论】:

  • 我在您的 $data 数组中看不到 $page_url。您可以在您的 php 代码中添加示例数据吗
  • @MohdAlomar,这是我的错误,应该是pageName。更新了我的问题
  • 您可以为您的代码添加 HTML 输出吗
  • @MohdAlomar 已添加到我的问题中。
  • 它写的是你需要的 HTML,但我要的是你的 PHP 生成的当前 HTML。

标签: php arrays multidimensional-array foreach


【解决方案1】:

您需要搜索子项以查看它们是否包含匹配的pageName,而不是与$main['pageName']进行比较。

替换

$sel1 = $p == $main['pageName'] ? 'nav-item active' : 'nav-item'; 

$sel1 = in_array($p, array_column($data[$main['id']], 'pageName')) ? 'nav-item active' : 'nav-item'; 

您也可以使用foreach 循环。

$sel1 = 'nav-item';
foreach ($data[$main['id']] as $sub) {
    if ($sub['pageName'] == $p) {
        $sel1 = 'nav-item active';
        break;
    }
}

【讨论】:

  • 再次感谢,我工作得很好。我不知道用那种方式使用array_column()
  • 您也可以只使用foreach() 循环来搜索每个元素(我原来在我的回答中就是这样做的)。
  • 如果您能以其他方式将其添加到您的答案中,那就太好了
  • 我将其添加到答案中。
猜你喜欢
  • 2011-10-31
  • 2011-07-01
  • 2015-10-30
  • 1970-01-01
  • 2011-06-05
  • 2012-04-06
  • 2018-06-09
  • 2011-10-04
相关资源
最近更新 更多