Cookie içindeki dizi elemanları üzerine nasıl eğer unsurların 'nr>

1 Cevap php

Bir seri ilanlar web sitesi var ve kullanıcıların bir reklamı tıkladığında, reklam id içeren bir dizi elemanı bir çerez ayarlanır.

Sonra ana sayfada, 'son ziyaret edilen reklamlar' gösterilmiştir.

Sorun Ben (10 set) 'son ziyaret reklamları' bir nr bir sınırı var, bir.

Çerez dizi 10'dan fazla unsurları içeriyorsa Yani, ben elemanları tek tek değiştirilmelidir istiyorum.

Ben bir kez cookies-array-length > 10 dizideki sadece son elemanını değiştirmek başardı. Ama sadece ben sonraki bir yerine istediğiniz zaman, son öğe yazılmadan tutar (son - 1).

Example: Cookie has more than 10 array elements. I click on an ad. Then the ad-id which gets replaced is the last element, ALWAYS. BUT, I want it to replace elements one by one starting from the last. (nr 10, nr 9, nr 8) so that it doesn't overwrite nr 10 all the time.

İşte kod:

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, '/');
    }
}

Peki, bu nasıl çözüleceği ile ilgili herhangi bir fikir var mı?

Teşekkürler

Not: Eğer daha fazla girdi ihtiyacınız varsa, bana ve ben Q güncelleme olacak!

1 Cevap

Neden eski reklam tıklama yerine değil? Bu nedenle daha çok a first in first out yapı olarak tedavi alır a last in first out yapısı olarak tedavi daha.

array_shift() bir göz atın

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, '/');
    }
}