Ограничить массив до 5 элементов
У меня есть код, который добавляет номер в массив каждый раз, когда страница посещается. Номера хранятся в куках и извлекаются позже.
Я хочу сохранить только 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 ответ(ов)
Чтобы получить 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
.
Для того чтобы управлять массивом, содержащим последние просмотренные статьи, вам нужно сначала определить его длину. Затем, если длина массива больше или равна 5, вы должны удалить первый элемент и добавить новый элемент в конец массива.
Вот пример кода на PHP, который реализует это:
if (!in_array($articleid, $lastviewedarticles)) {
$count = count($lastviewedarticles);
if ($count >= 5) {
array_shift($lastviewedarticles); // Удаляем первый элемент
}
$lastviewedarticles[] = $articleid; // Добавляем новый элемент в конец массива
}
В этом коде проверяем, есть ли идентификатор статьи в массиве lastviewedarticles
. Если его там нет, мы сначала смотрим на длину массива, и если она составляет 5 или больше, удаляем самый старый элемент (первый элемент) с помощью array_shift()
. Затем добавляем текущий articleid
в конец массива. Таким образом, массив всегда будет содержать только 5 последних просмотренных статей.
Вы можете использовать счетчик для доступа к массиву, инкрементировать его при каждом вызове и использовать оператор остатка от деления (modulus) для записи в массив. Если ваш счетчик должен сохраняться между несколькими вызовами, вам нужно хранить его в переменной сессии или в куки.
Предположим, что переменная $i
представляет ваш счетчик, тогда это будет выглядеть следующим образом:
if (!in_array($articleid, $lastviewedarticles)) {
$lastviewedarticles[$i % 5] = $articleid;
$i++;
}
Таким образом, вы получите примитивный кольцевой буфер, который всегда будет содержать последние 5 значений. Если у вас есть дополнительные вопросы или нужна помощь с реализацией, не стесняйтесь уточнять!
Преобразование объекта PHP в ассоциативный массив
Как добавить элементы в пустой массив в PHP?
Вставка нового элемента в массив в любом месте в PHP
Сортировка массива объектов по одному свойству
Отправка многомерного массива с помощью PHP и CURL