Ограничить массив до 5 элементов
У меня есть код, который будет добавлять число в массив каждый раз, когда страница посещается. номера сохраняются в файле cookie и затем извлекаются позже.
Я хотел бы сохранить только 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));
Ответы
Ответ 1
Прежде всего, я думаю, вам нужно получить длину массива, затем, если длинa > или равна 5, удалите первый элемент и добавьте элемент в конец массива.
if (!in_array($articleid, $lastviewedarticles)){
$count = count($lastviewedarticles);
if($count>=5)
array_shift($lastviewedarticles);
$lastviewedarticles[] = $articleid;
}
Ответ 2
array_slice возвращает срез массива
array_slice($array, 0, 5) // return the first five elements
Ответ 3
используйте array_splice и array_unique, чтобы получить 5 уникальных значений массива
array_splice(array_unique($lastviewedarticles), 0, 5);
Ответ 4
Одним из решений является определение константы MAX USERS:
$MAXUSERS = 5;
Затем каждый раз, когда вы добавляете элемент в массив, запустите проверку, чтобы убедиться, что количество элементов меньше $MAXUSERS. Если это так, просто добавьте. Если это не так, тогда вы запускаете что-то вроде..
$newArray = array_splice($lastviewedarticles, 0, 5);
Ответ 5
Используйте счетчик для доступа к массиву, увеличивайте его в каждом вызове и используйте операцию модуля для записи в массив. Если ваш счетчик должен сохранять несколько вызовов, вам необходимо сохранить их в переменной сеанса или в файле cookie.
Предполагая, что $i содержит вашу переменную счетчика, это выглядело бы как
if (!in_array($articleid, $lastviewedarticles)){
$lastviewedarticles[$i%5] = $articleid;
$i++;
}
Результат - это примитивный кольцевой буфер, который всегда будет содержать последние 5 значений.