包装foreach导致div

时间:2013-12-30 14:46:01

标签: php html

我的功能很棒

<?php
$categories = get_categories(array(
    'hide_empty'      => 0,
    'taxonomy'        => 'category',
    'orderby'         => 'title',
    'order'           => 'ASC'
));
foreach ($categories as $category) {
    $firstletter = strtoupper(substr($category->name,0,1));
    $link = get_category_link( $category->term_id );
    if ($firstletter != $current) {
        $postlist .= "<b><a name='$firstletter'> $firstletter </a></b><br>\n";
        $nav .= "<a href='#$firstletter'> $firstletter </a> ";
        $current = $firstletter;
    }
    $postlist .= "<a href='$link'>" . $category->cat_name . "</a><br>\n";
}

print $nav . "<br>" . $postlist;
?>

我需要的是从字母开始包装整个列表。例如,字母M将包含在一个div中,所有类别都以M开头。

这是我目前得到的:http://i.imgur.com/PEmJw03.png - 任何帮助将不胜感激,谢谢。

2 个答案:

答案 0 :(得分:0)

你似乎正走在正确的道路上。我认为这就是你要求做的事情:

$closeLastDiv = false;
foreach ($categories as $category) {
    $firstletter = strtoupper(substr($category->name,0,1));
    $link = get_category_link( $category->term_id );
    if ($firstletter != $current) {
        if ($firstletter == ""){ //first time through
            $postlist .= "<div>";
            $closeLastDiv = true;
        } else {
            $postlist .= "</div><div>";
        }
        $postlist .= "<b><a name='$firstletter'> $firstletter </a></b><br>\n";
        $nav .= "<a href='#$firstletter'> $firstletter </a> ";
        $current = $firstletter;
    }
    $postlist .= "<a href='$link'>" . $category->cat_name . "</a><br>\n";
}

if ($closeLastDiv) {
    $postlist .= "</div>";
}

答案 1 :(得分:0)

您需要的只是将当前字母与字母前面分开,如果更改则打印起始包装+内容。当字母改变时,关闭包装并打开下一个包装器。

这样的事情:

$current = "-";
$postlist .= "<div>";

foreach ($categories as $category) {
    $firstletter = strtoupper(substr($category->name,0,1));
    $link = get_category_link( $category->term_id );
    if ($firstletter != $current) {
        $postlist .= "</div><div id='{$firstletter}'>";
        $postlist .= "<b><a name='{$firstletter}'>".$firstletter."</a></b><br>\n";
        $nav .= "<a href='#{$firstletter}'>".$firstletter."</a> ";
        $current = $firstletter;
    }
    $postlist .= "<a href='$link'>" . $category->cat_name . "</a><br>";
}
$postlist .= "</div>";

第一个div仍为空,但其他一切都没问题。

相关问题