【发布时间】:2017-08-02 13:22:27
【问题描述】:
我得到了客户上次查看产品的列表。这是通过将产品 ID 添加到会话并将这些 ID 添加到显示产品的查询来完成的。会话数组必须只有 3 个 id 长。
当然不能添加重复项(如果一个人观看了 3 个产品,然后看了 1 个产品 3 次,则将只有 1 个最后查看的产品,因为它是 3 次相同的 id)。
所以我在下面的代码中使用了array_unique:
在产品页面上:-
$_SESSION['laatstbekeken'][] = $productcr[0]['id'];
在目录页面上:-
if($_SESSION['laatstbekeken'] != ''){
$result = array_unique($_SESSION['laatstbekeken']);
$sessionlimit = array_slice($result, -3);
$prods = implode(",", $sessionlimit);
$laatst = "SELECT * FROM `snm_content` WHERE id IN ($prods) and state = 1 ORDER BY id DESC LIMIT 0,3";
我的问题是这样的:-
当我观看例如产品编号 1 和之后观看产品 2 3 4 时,ID 包含 2,3,4 就像它应该的那样,但是当我再次观看 1 时,它没有被添加。该数组仍将包含 2,3,4,因为它会检查唯一性。
如果我打印 $result 这就是显示的内容:-
Array ( [0] => 7 [1] => 8 [2] => 5 [4] => 6 )
如果我打印 $sessionlimit 这是结果:-
Array ( [0] => 8 [1] => 5 [2] => 6 )
即使我再次打开 id 为 7 的产品,它也不会添加到数组 ($sessionlimit) 中。
我怎样才能让它像我想要的那样工作?
【问题讨论】:
-
而不是 $_SESSION['laatstbekeken'][] = $productcr[0]['id'];尝试使用 array_unshift($_SESSION['laatstbekeken'], $productcr[0]['id']);最新的手表产品将排在第一位。