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 に答える