nastya97core
@nastya97core
Начинающий программист

Как можно достать следующий и предыдущий элемент относительно $array[$i]?

Здравствуйте. Мне нужна функция, которая будет возвращать предыдущие или следующие элементы массива относительно заданных. И если задан последний элемент, то следующим будет - первый.

По сути я могу прописать все условия, где "если первый и left, то последний", "если последний и right, то первый", "если просто right, то +1" и "если просто left, то -1"
Но у меня такое чувство, что я пытаюсь придумать заново то, что уже есть в php - я просто про это не знаю.

Есть более элегантное решение?
$array = [
    "первый",
    "второй",
    'третий',
    'четвёртый'
];

function get($action, $i, $array){
if (count($array) === $i + 1 && $action === 'right') {
    $result = $array[0];
} else
if ($i === 0 && $action === 'left') {
    $result = end($array);
} else
if ($action === 'right') {
    $result = $array[$i+1];
} else 
if ($action === 'right') {
    $result = $array[$i-1];
}

return [$array, $action, $i, $result];
}

p( get('left', 0, $array) );
  • Вопрос задан
  • 116 просмотров
Решения вопроса 1
@Drayde
function get($action, $i, $array){
	$result = '';

	if ( $action == 'left' ) {
		$result = ( $i == 0 ) ? $array[count($array)] : $array[$i--];
	} else {
		$result = ( $i == count($array) ) ? $array[0] : $array[$i++];
	}

	return $result;
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@lavren
Мне кажется надо избавится от else-if

Что-бы получить "левый" - проверить если i - 1 < 0 то возвращаем последний, если не меньше то возвращаем i - 1
Что-бы получить "правый" - проверить если i + 1 > count($arr) то возвращаем первый в массиве если не больше то i + 1
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
ВЕРТЕКС Санкт-Петербург
от 90 000 ₽
Laptop.ru Москва
от 150 000 до 190 000 ₽
Кнопка Екатеринбург
от 80 000 ₽
02 авг. 2021, в 09:31
165000 руб./за проект
02 авг. 2021, в 09:30
125000 руб./за проект
09 июл. 2021, в 11:47
3500 руб./за проект