2016-05-17 61 views
0

尝试返回$ dy或$ days的值。有时设置$ dy,其他时间设置为$ days。具有多个值的三元多重条件

例如:$ DY [“值”] = 45或$天[“值”] = 75 (只有一个值将被设定)

然而,当我执行该语句的值总是等于到1 如何返回$ dy或$天的实际值。

$days = isset($dy['value']) || isset($days['value']) ? ($dy['value'] || $days['value']) : null; 

回答

1

关于1

在PHP中,||不这样做,你可能期望从JavaScript来什么,因为结果将永远是一个布尔值。 ||隐式地将其操作数转换为布尔值并返回结果。

从JavaScript获得短路||相当于在PHP中,你可以使用?:(即所谓的“猫王运算符” - x ?: yx ? x : y的简写):

$days = isset($dy['value']) || isset($days['value']) ? ($dy['value'] ?: $days['value']) : null; 

我没不改变第一个||,因为它确实是一个布尔操作,但我确实取代了第二个。


但是我认为这是在你的代码中的逻辑错误,无论如何,因为如果你有E_NOTICE错误报告上,PHP会无论如何,如果$days['value']设置和$dy['value']不抱怨,因为你还在访问$dy['value']甚至如果isset($dy['value']) == false。所以,你需要使用,例如:(假设你也想跳过一个值,如果它是falsy - 根据您如何使用它看起来像它的||

$days = (isset($dy['value']) ? $dy['value'] : null) ?: (isset($days['value']) ? $days['value'] : null); 

如果您根本不关心通知错误(不鼓励!)你可以使用:

$days = $dy['value'] ?: $days['value'] ?: null; 
+0

CherryDT你摇滚!其中一个最详细的答案呢... – no1uknow

+0

Thx!添加了关于此操作员实际内容的解释。 – CherryDT

0

任何特定的原因,你需要一个三元?在这种情况下,如果elseif可能会更干净,更易于阅读。

if (isset($dy['value'])) 
{ 
    $days = $dy['value']; 
} elseif (isset($days['value']) 
{ 
    $days = $days['value']; 
} 

如果绝对必须是一个三元,你需要一个三元三元之内:

$days = isset($dy['value']) ? $dy['value'] : (
      isset($days['value']) ? $days['value'] : null 
     ); 

如果你使用PHP 5.3+(你应该是)这应该工作到:

$days = $dy['value'] ?: ($days['value'] ?: null); 
0

我想这可能是你想要的东西:

$days = (isset($dy['value']) || isset($days['value'])) ? (isset($dy['value'])?$dy['value'] : $days['value'])) : null;