如何确定递归foreach函数中的第一个元素?

时间:2012-07-12 12:38:19

标签: php

我有一个生成嵌套导航菜单的函数:

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循环中的第一个元素,但是如何在它之外得到它呢?

5 个答案:

答案 0 :(得分:2)

您可以使用CSS选择器:first-childMDN)或:first-of-typeMDN)来定位相应的<ul>元素,因此您不需要需要为该元素添加特定的类。

答案 1 :(得分:2)

最佳传递适当的参数:

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

答案 2 :(得分:2)

您可以使用:first-child CSS Selector。 :)

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

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

与以下内容兼容:

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

因为您可以使用它来使用Pure CSS来定位它,所以您无需更改标记! :)

答案 3 :(得分:1)

通常第一个$key为零,因此您可以检查该条件:

$first = $key === 0;

如果您的第一个密钥不同,请使用第一个密钥:

$first = $key === $firstKey;

如果您的第一个密钥更改,请先获取它:

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

希望这有用。

在CSS本身中,您也可以使用:first-child pseudo-classCSS2。因此无需添加课程for various browsersBrowser Support

答案 4 :(得分:1)

:first-child很不错,但并不完全兼容。