首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多值三元多重条件

多值三元多重条件
EN

Stack Overflow用户
提问于 2016-05-17 15:28:33
回答 3查看 134关注 0票数 0

试图返回$dy或$days的值。有时设置$dy,有时设置$days。

例如:$dy' value‘= 45或$days'value’= 75 (只设置一个值)

但是,当我执行这个语句时,值总是等于1。我如何返回$dy或$days的实际值。

代码语言:javascript
复制
$days = isset($dy['value']) || isset($days['value']) ? ($dy['value'] || $days['value']) : null;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-05-17 15:32:47

关于1

在PHP中,||不执行您可能期望的来自JavaScript的操作,因为结果总是一个布尔值。||隐含地将其操作数转换为布尔值,并返回结果。

要从||中的JavaScript获得相当于短路的?:,您可以使用?:(所谓的"Elvis运算符“- x ?: yx ? x : y的缩写):

代码语言:javascript
复制
$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']。因此,您需要使用,例如:

代码语言:javascript
复制
$days = (isset($dy['value']) ? $dy['value'] : null) ?: (isset($days['value']) ? $days['value'] : null);

(假设您也想跳过一个值,如果它是假的-根据您使用||的方式,它看起来像它。)

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

代码语言:javascript
复制
$days = $dy['value'] ?: $days['value'] ?: null;
票数 1
EN

Stack Overflow用户

发布于 2016-05-17 15:33:43

有什么特别的原因你需要三元的吗?在这种情况下,如果其他的可能会更干净,更容易阅读。

代码语言:javascript
复制
if ( isset($dy['value']) )
{
    $days = $dy['value'];
} elseif ( isset($days['value'] )
{
    $days = $days['value'];
}

如果绝对必须是三元,则需要三元内的三元:

代码语言:javascript
复制
$days = isset($dy['value']) ? $dy['value'] : (
            isset($days['value']) ? $days['value'] : null
        );

如果您使用的是PHP (这是您应该使用的),那么它应该可以用于:

代码语言:javascript
复制
$days = $dy['value'] ?: ( $days['value'] ?: null );
票数 0
EN

Stack Overflow用户

发布于 2016-05-17 15:36:33

我想这可能是你想要的

代码语言:javascript
复制
$days = (isset($dy['value']) || isset($days['value'])) ? (isset($dy['value'])?$dy['value'] : $days['value'])) : null;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37280441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档