Подтвердить что ты не робот

Ограничить массив до 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));
4b9b3361

Ответ 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 значений.