【发布时间】:2016-01-12 13:14:19
【问题描述】:
我正在创建一个问答网站,类似于 SO。现在我需要在每个答案旁边打印一个“检查”icon (指定接受的答案)。现在有一些条件:
- 当前用户已登录?
- 当前用户是问题的作者?
- 是否有任何可接受的答案?
还有一些其他情况..!
实际上我实现了这一点。但是我使用了很多嵌套的if-statement 来做到这一点,在我看来真的没有优化。现在我想知道有没有更好的算法来写这段代码?
$results = $stm->fetchAll(PDO::FETCH_ASSOC); // Fetching all answers
foreach ($results as $result){
if ($_SESSION['id'] == $author_id){ // User is logged
if($result['id'] == $AcceptedAnswerId){ // There is accepted answer
$AcceptAnswerIcon = "<a href='#'>
<i style='color: green;' class='fa fa-check'></i>
</a>";
} else { // There isn't accepted answer
$AcceptAnswerIcon = "<a href='#'>
<i style='color: gray' class='fa fa-check'></i>
</a>";
}
}
elseif ($_SESSION['id'] !== $author_id) { // User isn't logged
if($result['id'] == $AcceptedAnswerId){ // There isn accepted answer
$AcceptAnswerIcon = "<i style='color: green;' class='fa fa-check'></i>";
} else { // There isn't accepted answer
$AcceptAnswerIcon = null;
}
}
else {
$AcceptAnswerIcon = null;
}
// ... I will use $AcceptAnswerIcon in here and mix it with answer structure
} // End of "foreach" block
【问题讨论】:
-
尝试编写不言自明的业务逻辑方法:
function userCanAcceptAnswer($user, $answer) { return $user['id'] == $answer['author_id'] && ...; }–if (userCanAcceptAnswer(..)) echo '<i ..';。这应该会大大简化这样的模板代码。 -
@deceze 这不是一个有效的关闭原因。这一点之前已经被经常指出。它在这里太宽泛了,可能是代码审查的一个很好的候选者。
标签: php performance if-statement