0

我正在尝试创建一个数组来显示客户查看的最后 5 个产品。

该数组是一个二维数组,如下所示...

$RView=数组(数组(ID =>“1001”,RefCode =>“Ref_01”,名称=>“Name_01”),...数组(ID =>“1005”,RefCode =>“Ref_05”,名称= >“名称_05”));

数组值是从产品记录集中检索的,旨在在客户访问产品页面时按以下方式运行。

  • 页面将检查会话数组是否存在
  • 如果是,则从现有 Session 创建一个数组变量。
    如果不是,则创建一个新数组。
  • Array 将添加新的产品详细信息。
  • 如果阵列中有超过 5 个现有产品,则阵列将计数。
  • 如果是,它将删除最旧的。
    如果否,则进行下一步。
  • 从修改后的数组创建/更新会话。

我目前的努力附在下面...
非常感谢您的帮助。

    <?php 
    session_start() 
    // Get or Create Array
    IF (isset($_SESSION['sessRView'])) {
    $RView = ($_SESSION['sessRView']); } 
    ELSE {
    $RView = array(array()); 
    }

    // Append currently viewed Product to Array
    array(array_unshift($RView, $row_rsPrd['PrdID'], $row_rsPrd['RefCode'], $row_rsPrd['Name']));

    // Check if more than 5 products exist in Array, if so delete.
    IF (sizeof($RView) > 5) {
    array(array_pop($RView)); }

    // Update Session for next page
    $_SESSION['sessRView'] = $RView;

    // Display Array
    for ($row = 0; $row < 5; $row++)
    {
    echo "<ul>";
        echo "<li><a href='?PrdID=".$RView[$row]["PrdID"]."'>".$RView[$row]["RefCode"]."</a> : ".$RView[$row]["Name"]."</li>";
    echo "</ul>";
    }
    ?>
4

1 回答 1

1

它或多或少是正确的 - 只需更改 2 行。

  1. array_unshift 和array_pop 周围不需要额外的array()。
  2. 当您使用 array_unshift 时,您正在推送一组项目(而不是单独的 ID/代码)-我认为您的意思是array_unshift($RView, array($prodid,$name,...))
  3. 如果 $RView 没有 5 个元素怎么办?在这种情况下,您正在访问未定义的数组索引(可能会或可能不会显示错误)。将其更改为 foreach 循环:例如
    foreach ($Rview as $prod) echo $prod['Name']...

进行这些更改后,它应该可以工作。不过,您可能想稍微清理一下编码风格:)


编辑:哦,我明白了,当您在 for 循环中引用数组时,它不知道该数组具有“ProdID”和“Name”索引。当您创建一个数组时,您必须使用 => 运算符定义索引。

  • 在 array_unshift 时向数组添加索引:
    array_unshift($RView, array("ProdID" => $row_rsProd["ProdID"], "Name"...))

  • 如果 row_rsProd 不是太大,您可以将整个 row_rsprod 粘贴到 $RView 上。
    所以将 array_unshift(...) 更改为 just$RView[] = $row_rsProd
    这样可以保留索引。

  • 或者,您可以更改 for 循环中的索引以匹配。现在,您取消转移到 $RView 的数组是基于 0 的 - $RView[0][0] 是第一个产品的产品 ID,等等。
    因此您可以将 foreach 循环中的内容更改为
    echo "<li>..." $prod[0] $prod[1] $prod[2]

希望有帮助!

于 2009-05-01T02:54:49.397 回答