在函数中使用下面的代码($floor
& $lift
时会传入,但我已将它们添加到此处进行演示)我最后得到Notice: Undefined offset: 20
return
声明。
最后一个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;
}
答案 0 :(得分: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以获取更多有关该答案的说明。)
答案 1 :(得分:1)
end
不返回最后一个键,而是返回数组的最后一个值。所以该行应为:
return ( array_key_exists( $floor, $moving["no_lift"] ) ? $moving["no_lift"][ $floor ] : end( $moving["no_lift"] );
(但仍假设$moving['no_lift']
是一个数组。)