繁体   English   中英

具有多个值的三元多重条件

[英]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 ?: yx ? 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM