2016-11-22 77 views
0

当一个函数($floor & $lift中通过,但我他们在这里以供演示),我在最后return声明得到了Notice: Undefined offset: 20使用下面的代码。不确定的偏移量()检查

最后return是这个例子中的意思,但为什么我会得到Notice: Undefined offset: 20?如果我没有弄错(我清楚地知道)array_key_exists()函数应该防止这种情况发生?我也试过isset()没有成功。

$floor = 20; 
$lift = false; 

$moving = array(
    "no_lift" => array(
     1 => 0, 
     2 => 13, 
     3 => 17, 
     4 => 20 
    ), 
    "lift" => array(
     1 => 0, 
     2 => 10, 
     3 => 10, 
     4 => 20 
    ) 
); 

switch ($lift) { 
    case true: 
     return (isset($moving["lift"][ $floor ]) ? $moving["lift"][ $floor ] : $moving["lift"][ end($moving["lift"]) ]); 
     break; 
    case false: 
     return (array_key_exists($floor, $moving["no_lift"]) ? $moving["no_lift"][ $floor ] : $moving["no_lift"][ end($moving["no_lift"]) ]); 
     break; 
} 
+1

'端($移动[ “no_lift”])'将'20'。哪些不存在。 –

+1

您正试图通过键访问数组,但实际上使用的是这些值! – Stuart

+0

也许你正在尝试使用array_key_exists来搜索值。你需要使用array_search来代替。 –

回答

2

end从数组返回最后,所以

$moving["lift"][ end($moving["lift"]) ] 

$moving["no_lift"][ end($moving["no_lift"]) ] 

都将是,实际上,

$moving["no_lift"][ 20 ] 

如果你正打算寻找一些数组中,并返回的最后一个项目,如果没有找到它,你可以使用in_array,如果你正在寻找一个值

if ($lift) { 
    return in_array($floor, $moving['lift']) ? $floor : end($moving['lift']); 
} else { 
    return in_array($floor, $moving['no_lift']) ? $floor : end($moving['no_lift']); 
} 

isset如果您正在寻找一把钥匙。

if ($lift) { 
    return isset($floor, $moving['lift']) ? $moving['lift'][$floor] : end($moving['lift']); 
} else { 
    return isset($floor, $moving['no_lift']) ? $moving['no_lift'][$floor] : end($moving['no_lift']); 
} 

您可以使用array_key_exists,而不是isset如果某些数组中的值可能是null。 (你可以核对答案here更多关于该说明的一点。)

+0

非常感谢 - 显然是我对文档的误解。 –

1

end不返回最后关键,但最后值数组。因此,行应为:

return (array_key_exists($floor, $moving["no_lift"]) ? $moving["no_lift"][ $floor ] : end($moving["no_lift"]); 

(但是仍然假定$moving['no_lift']是一个数组)

+0

非常感谢 - 显然是我对文档的误解。 –