У меня есть массив, который выглядит так,
Array ( [0] => 849710414 [1] => 849710726 [2] => 849710744 [3] => 849712728 [4] => 849713005 [5] => 849713439 [6] => 849714856 [7] => 849714924 [8] => 849716371 [9] => 849716441 [10] => 849717118 [11] => 849719043 [12] => 849719187 [13] => 849722865 [14] => 849723412 [15] => 849723777 [16] => 849725052 [17] => 849726294 [18] => 849726457 [19] => 849726902 [20] => 849728239 [21] => 849728372 [22] => 849728449 [23] => 849730353 [24] => 849733625 )
Это идентификаторы, которые мне нужно добавить к URL-адресу для навигации по сайту, идентификаторы – это результаты, которые возвращаются из поиска пользователя, затем пользователь нажимает на результат поиска и имеет возможность перейти к следующему результату поиска: посмотрите на предыдущий, теперь, хотя я бы мог это сделать,
<a href="<?=next($array);?>">Next</a> <a href="<?=prev($array);?>">Prev</a>
Как бы то ни было, я не понимаю, что текущий идентификатор результата, который я ищу, – это работа над тем, что будет дальше и раньше? Кто-нибудь теперь, как я могу это решить?
next()
и prev()
обрабатывают внутренний указатель массива во время обработки вашего скрипта.
Вам нужно выяснить, какой индекс массива вы просматриваете, ( array_search()
), затем добавьте 1, чтобы получить следующее значение, и вычтите 1, чтобы получить предыдущее значение.
// Find the index of the current item $current_index = array_search($current_id, $array); // Find the index of the next/prev items $next = $current_index + 1; $prev = $current_index - 1;
Ваш HTML:
<?php if ($prev > 0): ?> <a href="<?= $array[$prev] ?>">Previous</a> <?php endif; ?> <?php if ($next < count($array)): ?> <a href="<?= $array[$next] ?>">Next</a> <?php endif; ?>
Использование $ current_index + 1 и $ current_index – 1 может не работать, если ключи массива не являются последовательными. Вот лучший способ найти ключ массива относительно текущего.
function array_key_relative($array, $current_key, $offset = 1, $strict = true) { // create key map $keys = array_keys($array); // find current key $current_key_index = array_search($current_key, $keys, $strict); // return desired offset, if in array, or false if not if(isset($keys[$current_key_index + $offset])) { return $keys[$current_key_index + $offset]; } return false; }
Я нахожу эту функцию очень полезной для предыдущей и следующей кнопок и использую ее много.
Конечно, теперь вам нужно сохранить условия поиска в своем URL-адресе, чтобы вы могли выполнять поиск на каждой странице. Что-то вроде этого:
http://www.example.com/search/?s=some+search&row=4
… затем выполните поиск и покажите результат 4. Ваши предыдущие и следующие кнопки будут ссылаться на номер строки и сделать что-то вроде этого:
$previous_key = array_key_relative($search_results, $current_row, -1); $next_key = array_key_relative($search_results, $current_row, 1);
Это должно сделать это.
Массивы PHP содержат внутренний указатель. Этот указатель отслеживает текущий элемент. Когда вы создаете новый массив, указатель относится к первому элементу массива. Вызов next()
и prev()
перемещает указатель вперед и назад. Я подозреваю, что вы хотите сделать следующее:
<a href="<?php echo $array[$id + 1]; ?>">Next</a> <a href="<?php echo $array[$id - 1]; ?>">Prev</a>
Этот пример упрощен, так как он не проверяет правильность $id
, $id - 1
или $id + 1
.
Взгляните на php docs для current()
. Он объясняет, как работают указатели массива.
Наверное, вы хотите установить указатель в определенном месте. Для этого нет функции «из коробки», и вам придется делать это вручную с помощью чего-то вроде этого:
function set (&$array,$key) { reset ($array); while (key($array) !== $key) { if (next($array) === false) throw new Exception('Invalid key'); } } $array = array(4=>'a',2=>'b',0=>'c',9=>'d'); set($array,2); echo current($array); echo next($array)
Если вы вызываете next (), а затем prev (), вы вернетесь туда, где вы начали. Эти функции перемещают внутренний указатель в массиве, который определяет, какой элемент возвращается вызовом current ().
То, что вы, вероятно, хотите сделать, это сохранить ссылку на индекс идентификатора для страницы, на которой вы находитесь, предположим, что она хранится в $ i, а затем сделайте что-то вроде этого:
<a href="<?=$array[$i + 1]?>">Next</a> <a href="<?=$array[$i - 1]?>">Prev</a>
Разумеется, с соответствующей проверкой границ массива.