具有多个值的三元多个条件
ternary multiple conditions with multiple values
正在尝试 return $dy 或 $days 的值。有时设置 $dy,有时设置 $days。
例如:$dy['value'] = 45 或 $days['value'] = 75
(只会设置一个值)
然而,当我执行这条语句时,值总是等于 1。
我怎样才能 return $dy 或 $days 的实际值。
$days = isset($dy['value']) || isset($days['value']) ? ($dy['value'] || $days['value']) : null;
关于1
:
在 PHP 中,||
不会执行您可能期望来自 JavaScript 的操作,因为结果始终是布尔值。 ||
隐含地将其操作数转换为布尔值并 returns 结果。
要从JavaScript中得到短路||
在PHP中的等价物,你可以使用?:
(所谓的"Elvis operator" - x ?: y
是 x ? x : y
的 shorthand:
$days = isset($dy['value']) || isset($days['value']) ? ($dy['value'] ?: $days['value']) : null;
我没有更改第一个 ||
因为它确实是一个布尔运算,但我确实替换了第二个
但是我认为您的代码中存在逻辑错误,因为如果您有 E_NOTICE
错误报告,如果 $days['value']
已设置并且 $dy['value']
不是,因为即使 isset($dy['value']) == false
,您仍在访问 $dy['value']
。所以你需要使用,例如:
$days = (isset($dy['value']) ? $dy['value'] : null) ?: (isset($days['value']) ? $days['value'] : null);
(假设你还想跳过一个值,如果它是假的 - 根据你如何使用 ||
它看起来像它。)
如果您根本不关心通知错误(气馁!)您可以使用:
$days = $dy['value'] ?: $days['value'] ?: null;
您需要三元的任何特殊原因?在这种情况下,if 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;
正在尝试 return $dy 或 $days 的值。有时设置 $dy,有时设置 $days。
例如:$dy['value'] = 45 或 $days['value'] = 75 (只会设置一个值)
然而,当我执行这条语句时,值总是等于 1。 我怎样才能 return $dy 或 $days 的实际值。
$days = isset($dy['value']) || isset($days['value']) ? ($dy['value'] || $days['value']) : null;
关于1
:
在 PHP 中,||
不会执行您可能期望来自 JavaScript 的操作,因为结果始终是布尔值。 ||
隐含地将其操作数转换为布尔值并 returns 结果。
要从JavaScript中得到短路||
在PHP中的等价物,你可以使用?:
(所谓的"Elvis operator" - x ?: y
是 x ? x : y
的 shorthand:
$days = isset($dy['value']) || isset($days['value']) ? ($dy['value'] ?: $days['value']) : null;
我没有更改第一个 ||
因为它确实是一个布尔运算,但我确实替换了第二个
但是我认为您的代码中存在逻辑错误,因为如果您有 E_NOTICE
错误报告,如果 $days['value']
已设置并且 $dy['value']
不是,因为即使 isset($dy['value']) == false
,您仍在访问 $dy['value']
。所以你需要使用,例如:
$days = (isset($dy['value']) ? $dy['value'] : null) ?: (isset($days['value']) ? $days['value'] : null);
(假设你还想跳过一个值,如果它是假的 - 根据你如何使用 ||
它看起来像它。)
如果您根本不关心通知错误(气馁!)您可以使用:
$days = $dy['value'] ?: $days['value'] ?: null;
您需要三元的任何特殊原因?在这种情况下,if 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;