[英]ternary multiple conditions with multiple values
尝试返回$ dy或$ days的值。 有时设置$ dy,其他时候设置$ days。
例如:$ dy ['value'] = 45或$ days ['value'] = 75(将只设置一个值)
但是,当我执行此语句时,该值始终等于1。如何返回$ dy或$ days的实际值。
$days = isset($dy['value']) || isset($days['value']) ? ($dy['value'] || $days['value']) : null;
约1
:
在PHP中, ||
不会执行JavaScript可能产生的结果,因为结果始终是布尔值。 ||
隐式地将其操作数转换为布尔值并返回结果。
得到等效的短路||
从PHP中的JavaScript中,可以使用?:
所谓的“猫王运算符” x ?: y
是x ? x : y
的简写):
$days = isset($dy['value']) || isset($days['value']) ? ($dy['value'] ?: $days['value']) : null;
我没有更改第一个||
因为它确实是布尔运算,但是我确实替换了第二个。
但是我仍然认为您的代码中存在逻辑错误,因为如果您报告了E_NOTICE
错误,如果设置了$days['value']
没有设置$dy['value']
,PHP仍然会抱怨,因为您即使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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.