2009-10-12 2 views
0

У меня есть следующее, что хранит предыдущие 10 URL, в сессию:Уникальные записи в массиве

function curPageURL() { 
$pageURL = 'http'; 
if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";} 
$pageURL .= "://"; 
if ($_SERVER["SERVER_PORT"] != "80") { 
    $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; 
} else { 
    $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; 
} 
return $pageURL; 
} 
//Insert Current URL in SESSION 
     $CurrentPage = curPageURL(); 
     if(strpos($CurrentPage, '/products/')) 
     { 
     echo "<div class=\"title\">Recently viewed products</div> 
<div id=\"recent\">"; 
     $_SESSION['pages'][] = $CurrentPage; 
     if (Count ($_SESSION['pages']) > 10) 
     Array_Shift ($_SESSION['pages']); 

Как убедиться, что только уникальные записи хранятся?

Спасибо, B

ответ

1

Только после

$_SESSION['pages'][] = $CurrentPage; 

вам нужно добавить

$_SESSION['pages'] = array_unique($_SESSION['pages']); 

Docs доступны here

Этот метод требует меньше обработки, поскольку это родная функция. Выполнение «if» для каждого элемента в массиве потенциально может быть довольно дорогостоящим.

+0

thats the road i tring to down down - однако я получаю: Warning: array_unique() [function.array-unique]: Аргумент должен быть массивом в ??? – 2009-10-12 11:12:36

+0

извините, мой плохой. вставил неправильный код. Теперь он исправлен, вышеприведенное должно работать – Rowan

3

вместо $_SESSION['pages'][] = $CurrentPage попробовать $_SESSION['pages'][$CurrentPage] = 1

/редактирования: сохранить элементы, упорядоченные, предварительно сброшено:

unset($_SESSION['pages'][$CurrentPage]); 
$_SESSION['pages'][$CurrentPage] = 1; 
+0

Но это не приведет к автоматическому удалению других элементов массива. Если они посетили эту страницу 7 страниц назад, ключ для этого элемента, который, вероятно, он использует для вывода своей истории страниц, все равно будет тем, чем он был на 7 страниц назад, не перемещая его вверх или переставляя другой 6 страниц, правильно? – Anthony

3
if(!in_array($CurrentPage, $_SESSION['pages']) { 
    $_SESSION['pages'][] = $CurrentPage; 
} 
Смежные вопросы