尝试返回$ dy或$ days的值。有时设置$ dy,其他时间设置为$ days。具有多个值的三元多重条件
例如:$ DY [“值”] = 45或$天[“值”] = 75 (只有一个值将被设定)
然而,当我执行该语句的值总是等于到1 如何返回$ dy或$天的实际值。
$days = isset($dy['value']) || isset($days['value']) ? ($dy['value'] || $days['value']) : null;
尝试返回$ dy或$ days的值。有时设置$ dy,其他时间设置为$ days。具有多个值的三元多重条件
例如:$ DY [“值”] = 45或$天[“值”] = 75 (只有一个值将被设定)
然而,当我执行该语句的值总是等于到1 如何返回$ dy或$天的实际值。
$days = isset($dy['value']) || isset($days['value']) ? ($dy['value'] || $days['value']) : null;
关于1
:
在PHP中,||
不这样做,你可能期望从JavaScript来什么,因为结果将永远是一个布尔值。 ||
隐式地将其操作数转换为布尔值并返回结果。
从JavaScript获得短路||
相当于在PHP中,你可以使用?:
(即所谓的“猫王运算符” - x ?: y
是x ? 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;
任何特定的原因,你需要一个三元?在这种情况下,如果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);
我想这可能是你想要的东西:
$days = (isset($dy['value']) || isset($days['value'])) ? (isset($dy['value'])?$dy['value'] : $days['value'])) : null;
CherryDT你摇滚!其中一个最详细的答案呢... – no1uknow
Thx!添加了关于此操作员实际内容的解释。 – CherryDT