尝试返回$ 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;
答案 0 :(得分:1)
关于1
:
在PHP中,||
没有按照您的期望来自JavaScript,因为结果将始终是一个布尔值。 ||
隐含地将其操作数转换为布尔值并返回结果。
为了从PHP中的JavaScript获得等效的短路||
,您可以使用?:
(所谓的“Elvis运算符” - x ?: y
是{的简写{1}}):
x ? x : y
我没有更改第一个$days = isset($dy['value']) || isset($days['value']) ? ($dy['value'] ?: $days['value']) : null;
,因为它确实是一个布尔操作,但我确实替换了第二个。
但是我认为你的代码中存在逻辑错误,因为如果你有||
错误报告,如果设置E_NOTICE
并且$days['value']
不是$dy['value']
,那么PHP会抱怨,因为即使$dy['value']
您仍在访问isset($dy['value']) == false
。所以你需要使用,例如:
$days = (isset($dy['value']) ? $dy['value'] : null) ?: (isset($days['value']) ? $days['value'] : null);
(假设您还希望跳过一个值,如果它是假的 - 根据您使用||
的方式看起来像它。)
如果您根本不关心通知错误(不鼓励!),您可以使用:
$days = $dy['value'] ?: $days['value'] ?: null;
答案 1 :(得分:0)
你需要三元的任何特殊原因吗?在这种情况下,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 );
答案 2 :(得分:0)
我想这可能是你想要的:
$days = (isset($dy['value']) || isset($days['value'])) ? (isset($dy['value'])?$dy['value'] : $days['value'])) : null;