2012-07-12 48 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來定位它,所以你不需要改變標記! :)