复杂的`if`case,对吗?

时间:2014-12-11 08:59:04

标签: php

我正在努力弄清楚如何解决这个问题。请温柔,我还在学习!

有四个工作场所:B.Avf,R.Avf,Office和Production。产品正在通过theese工作场所。现在我正在构建一个脚本,可以提醒相同的产品是否通过同一个工作场所两次。现在,这是困难的部分:如果产品已通过“B.Avf”,则无法通过“R.Avf”发出警告,如果产品已通过“R.Avf”则无法通过“B” .Avf“whitout and alert。但如果产品已经过去了。 “R.Avf”可以通过“办公室”发送警告。

这是我到目前为止所得到的:(这就像第5个示例=)

Maby应该创建嵌套的if语句吗?

这段代码一直都会变为现实!

PHP

if($_SESSION['user']['usr_workplace'] == "R.Avf" ||
   $_SESSION['user']['usr_workplace'] == "B.Avf" && 
   strpos($history, "R.Avf") !== FALSE ||
   strpos($history, "B.Avf") !== FALSE)

5 个答案:

答案 0 :(得分:2)

您的if条件应为:

//IF this session user workplace is "B.Avf" or "R.Avf"
//AND "B.Avf" or "R.Avf" excist in history, then alert!

if(($_SESSION['user']['usr_workplace'] == "R.Avf"  || $_SESSION['user']['usr_workplace'] == "B.Avf") && (strpos($history, "R.Avf") !== FALSE || strpos($history, "B.Avf") !== FALSE))

答案 1 :(得分:1)

通过删除一个条件并仍能获得所需的结果,可以使if语句变得更简单:

if(
    ($_SESSION['user']['usr_workplace'] == "R.Avf" || $_SESSION['user']['usr_workplace'] == "B.Avf")
    && 
    strpos($history, $_SESSION['user']['usr_workplace']) !== false
)

注意你不需要两个strpos检查,因为if语句的第一部分只允许第二部分运行,如果它是真的。

最好将其提取到一个方法或进一步简化它,但对于你所要求的,这将会做:)。

答案 2 :(得分:0)

这很有效,它有正确的大括号:

if($_SESSION['user']['usr_workplace'] == "R.Avf" || ($_SESSION['user']['usr_workplace'] == "B.Avf" && (strpos($history, "R.Avf") !== FALSE || strpos($history, "B.Avf") !== FALSE)))

首先检查r.Avf,然后检查括号内的所有条件

答案 3 :(得分:0)

如果分成两种方法,你应该打破这个。 应该叫一个:

isUserSessionRBAvf($_SESSION['user']['usr_workplace'])

另一个应该检查strpos pos:

isHistoryAvf($history, "R.Avf")

你最终只会:

if(isUserSessionRBAvf(...) && isHistoryAvf(...))
通过这种方式,您可以获得更易读的代码并且更容易调试。

P.S。考虑一种不同的方法命名

答案 4 :(得分:0)

您需要做的只是检查session value$history,这样您就不会检查two strpos()您正在进行静态字符串检查的位置:

这里用静态字符串检查:

strpos($history, "R.Avf") !== FALSE ||
   strpos($history, "B.Avf") !== FALSE)

让它像这样动态:

if($_SESSION['user']['usr_workplace'] == "R.Avf" || $_SESSION['user']['usr_workplace'] == "B.Avf" && strpos($history, $_SESSION['user']['usr_workplace']) !== FALSE )