0

Ограничить массив до 5 элементов

10

У меня есть код, который добавляет номер в массив каждый раз, когда страница посещается. Номера хранятся в куках и извлекаются позже.

Я хочу сохранить только 5 самых последних номеров в массиве.

Если массив заполнен (5 элементов), и необходимо добавить новый номер, то старый номер должен быть удалён, а самые свежие элементы должны оставаться.

Вот что у меня есть:

$lastviewedarticles = array();

if (isset($_COOKIE["viewed_articles"])) {
    $lastviewedarticles = unserialize($_COOKIE["viewed_articles"]);
}

if (!in_array($articleid, $lastviewedarticles)){
    $lastviewedarticles[] = $articleid;
}
setcookie("viewed_articles", serialize($lastviewedarticles));

Как мне изменить код, чтобы он удалял самый старый номер, когда массив достигает 5 элементов, и добавлял новый номер?

3 ответ(ов)

0

Чтобы получить 5 уникальных значений из массива $lastviewedarticles, вы можете использовать функции array_unique и array_splice. Вот пример кода:

$result = array_splice(array_unique($lastviewedarticles), 0, 5);

Объяснение:

  • array_unique($lastviewedarticles) удалит все дубликаты из массива $lastviewedarticles, оставив только уникальные значения.
  • array_splice(..., 0, 5) возьмет первые 5 элементов из массива уникальных значений.

Таким образом, переменная $result будет содержать массив из 5 уникальных значений из $lastviewedarticles.

0

Для того чтобы управлять массивом, содержащим последние просмотренные статьи, вам нужно сначала определить его длину. Затем, если длина массива больше или равна 5, вы должны удалить первый элемент и добавить новый элемент в конец массива.

Вот пример кода на PHP, который реализует это:

if (!in_array($articleid, $lastviewedarticles)) {
    $count = count($lastviewedarticles);
    if ($count >= 5) {
        array_shift($lastviewedarticles); // Удаляем первый элемент
    }
    $lastviewedarticles[] = $articleid; // Добавляем новый элемент в конец массива
}

В этом коде проверяем, есть ли идентификатор статьи в массиве lastviewedarticles. Если его там нет, мы сначала смотрим на длину массива, и если она составляет 5 или больше, удаляем самый старый элемент (первый элемент) с помощью array_shift(). Затем добавляем текущий articleid в конец массива. Таким образом, массив всегда будет содержать только 5 последних просмотренных статей.

0

Вы можете использовать счетчик для доступа к массиву, инкрементировать его при каждом вызове и использовать оператор остатка от деления (modulus) для записи в массив. Если ваш счетчик должен сохраняться между несколькими вызовами, вам нужно хранить его в переменной сессии или в куки.

Предположим, что переменная $i представляет ваш счетчик, тогда это будет выглядеть следующим образом:

if (!in_array($articleid, $lastviewedarticles)) {
    $lastviewedarticles[$i % 5] = $articleid;
    $i++;
}

Таким образом, вы получите примитивный кольцевой буфер, который всегда будет содержать последние 5 значений. Если у вас есть дополнительные вопросы или нужна помощь с реализацией, не стесняйтесь уточнять!

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь