2013-12-19 17 views
0

我有一個項目列表,按組分組。當用戶未登錄時,我只打印不需要登錄的項目。如果用戶未登錄並且組中的所有項目都需要登錄,請隱藏組

$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示例中的「食物」類別。

我可以通過數組兩次,但有沒有更有效的方法來做到這一點?

回答

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>'; 
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>'; 
    } 
} 

但是,這樣做不止一個迭代會給你更乾淨的代碼。

相關問題