При использовании кода ниже в функции ($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;
}
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
, (Вы можете проверить ответы Вот немного больше описания об этом.)
end
не возвращает последний ключ, но последний значение массива. Поэтому строка должна выглядеть так:
return ( array_key_exists( $floor, $moving["no_lift"] ) ? $moving["no_lift"][ $floor ] : end( $moving["no_lift"] );
(Однако это все еще предполагает, что $moving['no_lift']
это массив.)