如果用户未登录且组中的所有项目都需要登录,请隐藏组

时间:2013-12-19 20:11:49

标签: php arrays

我有一个项目列表,按组分类。当用户未登录时,我只打印不需要登录的项目。

$previous_group = '';
foreach ($arr as $item) {
    if($previous_group != $item['group']) {
        // Add dividers
        if($previous_group != '') echo '</ul>';
        echo '<h3>'.$item['group'].'</h3>';
        echo '<ul>';
    }
    $previous_group = $item['group'];

    if($item['login_required'] !== 'true' || ($item['login_required'] == 'true' && $isLoggedIn != false)) {
        echo '<li>'.$item['title'].'</li>';
    }
}
echo '</ul>';

PhpFiddle

如何因为用户未登录而隐藏没有任何项目的组的标题?例如,PhpFiddle示例中的“食物”类别。

我可以通过两次数组,但是有更有效的方法吗?

2 个答案:

答案 0 :(得分:1)

尝试

$previous_group = '';
foreach ($arr as $item) {
    if($previous_group != $item['group'] && ($item['login_required'] == 'false' || $isLoggedIn == 'true')) {
        // Add dividers
        if($previous_group != ''){echo '</ul>';}
            echo '<h3>'.$item['group'].'</h3>';
            echo '<ul>';

    }
    $previous_group = $item['group'];

    if($item['login_required'] !== 'true' || ($item['login_required'] == 'true' && $isLoggedIn != false)) {
        echo '<li>'.$item['title'].'</li>';
    }
}
echo '</ul>';

答案 1 :(得分:0)

如果您只需要一次迭代:

$previous_group = '';
$group_content = '';
$last_key = end(array_keys($arr));
foreach ($arr as $key => $item) {
    if (!$previous_group) $previous_group = $item['group'];
    if ($key === $last_key && $previous_group == $item['group'] && ($item['login_required'] !== 'true' || ($item['login_required'] == 'true' && $isLoggedIn != false))) $group_content .= '<li>'.$item['title'].'</li>';
        if ($group_content) {
            echo '<h3>'.$item['group'].'</h3>';
            echo '<ul>';
            echo $group_content;
            echo '</ul>';
        }
        $previous_group = $item['group'];
        $group_content = '';
    }

    if($item['login_required'] !== 'true' || ($item['login_required'] == 'true' && $isLoggedIn != false)) {
        $group_content .= '<li>'.$item['title'].'</li>';
    }
}

但是,执行多次迭代将为您提供更清晰的代码。