2013-03-07 6 views
21

Mam kod, który doda numer do tablicy za każdym razem, gdy odwiedzana jest strona. liczby są przechowywane w pliku cookie i są pobierane później.Tablica limitów do 5 elementów

Chciałbym zachować tylko 5 ostatnich numerów w tablicy.

jeśli tablica jest pełna (5 pozycji), a nowy numer należy dodać, następnie najstarszy numer musi być usunięty i najnowsze pozycje muszą być przechowywane

oto co mam:

$lastviewedarticles = array(); 

if (isset($_COOKIE["viewed_articles"])) { 
    $lastviewedarticles = unserialize($_COOKIE["viewed_articles"]); 
} 

if (!in_array($articleid, $lastviewedarticles)){ 
    $lastviewedarticles[] = $articleid; 
} 
setcookie("viewed_articles", serialize($lastviewedarticles)); 
+0

Możliwy duplikat [PHP: jak 'cut' moją tablicę] (http://stackoverflow.com/questions/3585966/php-how-to-cut-my-array) –

Odpowiedz

4

Przede wszystkim myślę, trzeba uzyskać długość tablicy, a następnie, jeśli długość> lub równe 5, usuń pierwszy element i dodać element na końcu tablicy.

if (!in_array($articleid, $lastviewedarticles)){ 
    $count = count($lastviewedarticles); 
    if($count>=5) 
     array_shift($lastviewedarticles); 
    $lastviewedarticles[] = $articleid; 
} 
101

array_slice zwraca wycinek tablicy

array_slice($array, 0, 5) // return the first five elements 
+0

Dziękuję Boss dałeś mi prostą i inteligentną odpowiedź ...... :) –

+0

Z dokumentacji: * Jeśli tablica jest krótsza niż długość, to będą dostępne tylko dostępne elementy tablicy. * – devios1

2

Jednym z rozwiązań jest określenie stałej, maksymalnej liczby użytkowników:

$MAXUSERS = 5; 

Następnie za każdym razem, gdy dodajesz element do tablicy, uruchom kontrolę, aby upewnić się, że liczba elementów jest mniejsza niż $ MAXUSERS. Jeśli tak, po prostu dodaj. Jeśli tak nie jest, wtedy uruchomić coś takiego ..

$newArray = array_splice($lastviewedarticles, 0, 5); 
1

użyć licznika aby uzyskać dostęp do tablicy, zwiększyć ją w każde wezwanie i użyć operacji modulo pisać na tablicy. Jeśli Twój licznik musi utrzymywać się przez kilka połączeń, musisz przechowywać go w zmiennej sesji lub pliku cookie.

Zakładając, że $ i posiada zmienną licznik to będzie wyglądać

if (!in_array($articleid, $lastviewedarticles)){ 
    $lastviewedarticles[$i%5] = $articleid; 
    $i++; 
} 

Rezultatem jest prymitywny bufor pierścień, który zawsze będzie zawierał ostatnie 5 wartości.

5

użycie array_splice i array_unique dostać wartościach 5 wyjątkowa tablica

array_splice(array_unique($lastviewedarticles), 0, 5); 
+1

To działało dla mnie, ale przy użyciu array_slice zamiast array_splice, tak jak na odpowiedź Nirav z finezją array_unique jest to, co polecam. Więc skreślić literówkę i ta odpowiedź jest prawdopodobnie najlepsza. –