Как переписать элементы массива внутри cookie, если 'nr of elements> x'? - PullRequest
0 голосов
/ 28 ноября 2009

У меня есть сайт объявлений, и когда пользователи нажимают на объявление, элемент массива, содержащий идентификатор объявления, устанавливается в файл cookie.

Затем на главной странице отображается «последнее посещенное объявление».

Проблема в том, что у меня есть ограничение на количество "последних посещенных объявлений" (установлено на 10).

Итак, если массив cookie содержит более 10 элементов, я хочу, чтобы элементы заменялись по одному.

Мне удалось заменить только последний элемент в массиве после cookies-array-length > 10. Но он только перезаписывает последний элемент, когда я хочу заменить следующий (последний - 1).

Пример: Cookie содержит более 10 элементов массива. Я нажимаю на объявление. Тогда ad-id, который заменяется, является последним элементом, ВСЕГДА. НО, я хочу заменить элементы один за другим, начиная с последнего. (номер 10, номер 9, номер 8), чтобы он не перезаписывал номер 10 все время.

Вот код:

if (isset($_COOKIE['watched_ads'])){
    $expir = time()+1728000; //20 days
    $ad_arr = unserialize($_COOKIE['watched_ads']);
    $arr_elem = count($ad_arr);
    for ($i=0; $i<$arr_elem; $i++){
        if ($ad_arr[$i] == $ad_id) { $ad_in_cookie_exists = 1; 
        }
    }
    if ($arr_elem>10 && $ad_in_cookie_exists!=1){
        $ad_arr[$arr_elem-1]=$ad_id; // HERE IS THE PROBLEM, IT REPLACES LAST ONE, CANT FIGURE OUT HOW TO REPLACE ONE BY ONE!
        setcookie('watched_ads', serialize($ad_arr), $expir, '/');
    }

    else if ($ad_in_cookie_exists !=1 && $arr_elem<=10){
    $ad_arr[] = $ad_id; echo "andra";
    setcookie('watched_ads', serialize($ad_arr), $expir, '/');
    }
}

Итак, у вас есть идеи, как решить эту проблему?

Спасибо

PS: если вам нужно больше информации, скажите мне, и я обновлю Q!

1 Ответ

0 голосов
/ 28 ноября 2009

Почему бы не заменить самый старый рекламный клик? Поэтому вместо того, чтобы рассматривать его как [последний пришел первым вышел] (http://en.wikipedia.org/wiki/LIFO_(computing)) структура, он обрабатывается как [первый пришел первым вышел] (http://en.wikipedia.org/wiki/FIFO_(computing)) структура.

Взгляните на array_shift ()

if (isset($_COOKIE['watched_ads'])){
    $expir = time()+1728000;
    $ad_arr = unserialize($_COOKIE['watched_ads']);
    $arr_elem = count($ad_arr);

    if ( in_array($ad_id) == FALSE ){
        if ( $arr_elem > 10 ){
            $ad_arr = array_shift($ad_arr);
        }
        $ad_arr[] = $ad_id;
        setcookie('watched_ads', serialize($ad_arr), $expir, '/');
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...