试图返回$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;发布于 2016-05-17 15:32:47
关于1
在PHP中,||不执行您可能期望的来自JavaScript的操作,因为结果总是一个布尔值。||隐含地将其操作数转换为布尔值,并返回结果。
要从||中的JavaScript获得相当于短路的?:,您可以使用?:(所谓的"Elvis运算符“- 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;发布于 2016-05-17 15:33:43
有什么特别的原因你需要三元的吗?在这种情况下,如果其他的可能会更干净,更容易阅读。
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 (这是您应该使用的),那么它应该可以用于:
$days = $dy['value'] ?: ( $days['value'] ?: null );发布于 2016-05-17 15:36:33
我想这可能是你想要的
$days = (isset($dy['value']) || isset($days['value'])) ? (isset($dy['value'])?$dy['value'] : $days['value'])) : null;https://stackoverflow.com/questions/37280441
复制相似问题