Определение предыдущего и следующего элементов в массиве

11 Декабря 2019 15:55

 Алгоритм простой, но гениальный!

  1. Находим текущий id (id просматриваемого ресурса на сайте) в массиве и записываем true в $now.
  2. Если $now == true то $seen = true
  3. Если $seen == false то присваеваем $prev id текущего ресурса в итерации. Таким образом, в $prev будет записываться каждый id пока мы не дайдем до id текущей страницы.
  4. Далее, если $seen == true (прошли текущий id), $next == false (еще не обявлен) и мы не находимся в текущем ресурсе то присваиваем $next id текущего ресурса в итерации. Таким образом, под это условие будет попадать только следующий элемент в массиве после текущего!
  5. На последок, просто предусматриваем ситуации когда мы находимся на первой странице и на последней!
$array = array(
    0 => array(
    	'id' => 32,
    	'title' => 'test 1',
    	'uri' => 'test-1.html'
    ),
    1 => array(
    	'id' => 71,
    	'title' => 'test 2',
    	'uri' => 'test-2.html'
    ),
    2 => array(
    	'id' => 17,
    	'title' => 'test 3',
    	'uri' => 'test-3.html'
    ),
    3 => array(
    	'id' => 83,
    	'title' => 'test 4',
    	'uri' => 'test-4.html'
    )
);
$prev = null;
$next = null;
$seen = false;
$now = false;

$currentId = 17;

foreach ($array as $item) {
    $now = ($item['id'] == $currentId);
    if ($now) {
        $seen = TRUE;
    }
    if (!$seen) {
        $prev = $item['id'];
    }
    if ($seen && empty($next) && !$now) {
        $next = $item['id'];
    }
}
if(!$prev) {
    $prev = $array[count($array) - 1];
}
if(!$next) {
    $next = $array[0];
}