我正在努力弄清楚如何解决这个问题。请温柔,我还在学习!
有四个工作场所: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)
答案 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 )