Каждый раз, когда пользователь посещает страницу, URL-адрес страницы будет храниться в сеансе массива. Я хочу иметь только 10 элементов в массиве. Таким образом, 10 элементов сохранят 10 последних посещенных страниц. Вот мои коды:
<?php $currentpageurl = $_GET['username']; $urlarray=array(); $urlarray[] = $currentpageurl; $_SESSION['pageurl']=$urlarray; foreach($_SESSION['pageurl'] as $key=>$value) { echo 'The value of $_SESSION['."'".$key."'".'] is '."'".$value."'".' <br />'; } ?>
Я протестировал код, он всегда перезаписывает элемент в массиве с новой посещенной страницей, поэтому он имеет только 1 элемент в массиве. Как заставить его не перезаписывать элемент?
Вы всегда переписываете массив с новым здесь:
$urlarray=array(); // new empty array $urlarray[] = $currentpageurl; $_SESSION['pageurl']=$urlarray;
Вместо этого используйте:
session_start(); // like @Kwpolska said, you probably miss that, so $_SESSION didnt work is_array($_SESSION["pageurl"]) or $_SESSION["pageurl"] = array(); // fix for your current problem $_SESSION['pageurl'][] = $currentpageurl; // This appends it right onto an array. $_SESSION["pageurl"] = array_slice($_SESSION["pageurl"], -10); // to cut it down to the last 10 elements
Самый простой способ сделать это и сохранить только последние 10 записей – создать исходный массив с правильным размером (через array_fill ()). Затем мы можем вывести новые элементы в начало массива и поместить старые элементы с другого конца, используя array_unshift () и array_pop ().
session_start(); // Initialise URL array with 10 entries. if (empty($_SESSION['pageurls'])) { $_SESSION['pageurls'] = array_fill(0,10,''); } function trackPage($url) { array_unshift($_SESSION['pageurls'],$url); array_pop($_SESSION['pageurls']); }
Убедитесь, что вышеуказанный код всегда работает первым. Затем вы можете передавать новые URL-адреса в массив, если хотите. Итак, возможно, что-то вроде:
trackPage($_SERVER['REQUEST_URI']);
Вы опустили session_start();
, Рабочий код (без обрезки):
<?php session_start(); $currentpageurl = $_GET['username']; $_SESSION['pageurl'][] = $currentpageurl; foreach($_SESSION['pageurl'] as $key=>$value) { echo 'The value of $_SESSION['."'".$key."'".'] is '."'".$value."'".' <br />'; } ?>