1

在函数中使用下面的代码时($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;
}
4

2 回答 2

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. (您可以在此处查看答案以获取更多关于此的描述。)

于 2016-11-22T16:40:11.200 回答
1

end不返回最后一个,而是返回数组的最后一个值。所以该行应该是:

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

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

于 2016-11-22T16:40:23.183 回答