2012-07-12 50 views
0

我有一个函数生成嵌套导航菜单:如何确定递归foreach函数中的第一个元素?

function recursive_foreach($array, $display) { 
    $out = '<ul>'; 
    foreach ($array as $key => $value) { 
     ... 
     $out .= '<li class="'. $is_active . $is_parent . '"><a href="' . $url . '">' . $value['name'] . '</a>'; } 
     if (is_array($value['has_children'])) { 
      $out .= recursive_foreach(... 
     } 
     $out .= "</li>"; 
    } 
    $out .= '</ul>';  
    return $out;  
} 

我想CSS类添加只是第一个“UL”元素。我知道如何确定foreach循环中的第一个元素,但是如何才能在它之外获取它?

+0

这是什么递归? – Quentin 2012-07-12 12:40:32

+3

我很想念这是如何递归的。 – SomeKittens 2012-07-12 12:40:33

+1

我没有在这里展示整个功能。在我有3个点的地方,我叫:if(is_array($ value ['has_children'])){$ out。= recursive_foreach(.... – gordonek 2012-07-12 12:54:58

回答

2

最佳传递一个适当的参数:

function recursive_foreach($array, $display, $first = true) { 
    ... 
    recursive_foreach($foo, $bar, false); 
    ... 
} 
1

通常情况下,第一$key为零,所以你可以检查该条件:

$first = $key === 0; 

如果你的第一个关键是不同的,使用的第一个键:

$first = $key === $firstKey; 

如果你的第一个关键的变化,先获得它:

list($firstKey) = array_keys($array); 

希望这是有帮助的。

在CSS本身,你也可以使用:first-child pseudo-classCSS2。所以不需要添加类for various browsersBrowser Support

2

你可以使用CSS选择器:first-childMDN)或:first-of-typeMDN)为目标的相应<ul>元素,所以你并不需要一个特定的类添加到该元素。

2

您可以使用:first-child CSS选择器。 :)

所以,你的CSS应该这样看:

ul li:first-child { /* CSS Code */ } 

它与兼容:

  • IE 7+
  • 火狐
  • Safari浏览器

因为你可以用它来使用纯CSS来定位它,所以你不需要改变标记! :)