php массивы next () и prev () - PullRequest
       15

php массивы next () и prev ()

1 голос
/ 07 апреля 2010

У меня есть массив, который выглядит следующим образом:

    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>

Каккогда-нибудь я, кажется, не узнаю, какой идентификатор текущего результата, на который я смотрю, должен работать, что является следующим и предыдущим?Кто-нибудь теперь, как я могу решить это?

Ответы [ 5 ]

9 голосов
/ 07 апреля 2010

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; ?>
4 голосов
/ 20 апреля 2010

Использование $ 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);

Это должно сделать это.

1 голос
/ 07 апреля 2010

Массивы 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 документы для current().Он объясняет, как работают указатели массива.

0 голосов
/ 07 апреля 2010

Если вы позвоните next (), а затем prev (), вы вернетесь к тому, с чего начали. Эти функции перемещают внутренний указатель в массиве, который определяет, какой элемент возвращается при вызове current ().

Что вы, вероятно, хотите сделать, это сохранить ссылку на индекс идентификатора страницы, на которой вы находитесь, скажем, она хранится в $ i, а затем сделать что-то вроде этого:

<a href="<?=$array[$i + 1]?>">Next</a>
<a href="<?=$array[$i - 1]?>">Prev</a>

Конечно, с соответствующей проверкой границ массива.

0 голосов
/ 07 апреля 2010

Полагаю, вы хотите установить указатель в определенном месте.Для этого нет функции «из коробки», и вам придется делать это вручную, например:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...