【问题标题】:How to update a last viewed products array correctly如何正确更新上次查看的产品数组
【发布时间】: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']);最新的手表产品将排在第一位。

标签: php arrays session


【解决方案1】:

您可以使用 array_reverse 函数获得所需的输出,尝试以下代码

   if($_SESSION['laatstbekeken'] != ''){
    $result = array_unique(array_reverse($_SESSION['laatstbekeken']));
    $prods  = implode(",", array_slice($result,0,3));
}

【讨论】:

  • 你试过了吗?
猜你喜欢
  • 2020-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多