Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:Session二维数组-跟踪查看的产品_Php_Arrays_Session_Multidimensional Array - Fatal编程技术网

PHP:Session二维数组-跟踪查看的产品

PHP:Session二维数组-跟踪查看的产品,php,arrays,session,multidimensional-array,Php,Arrays,Session,Multidimensional Array,我正在尝试创建一个数组来显示客户最近查看的5种产品 数组是一个二维数组,如下所示 $RView=数组( 数组(ID=>“1001”,RefCode=>“Ref\u 01”,Name=>“Name\u 01”), ... 数组(ID=>“1005”,RefCode=>“Ref_05”,Name=>“Name_05”) ); 数组值从产品记录集中检索,并设计为在客户访问产品页面时按如下方式运行 页面将检查会话数组是否存在 如果是,则从现有会话创建数组变量 如果否,则创建一个新数组 数组将添加新产

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

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

$RView=数组( 数组(ID=>“1001”,RefCode=>“Ref\u 01”,Name=>“Name\u 01”), ... 数组(ID=>“1005”,RefCode=>“Ref_05”,Name=>“Name_05”) );

数组值从产品记录集中检索,并设计为在客户访问产品页面时按如下方式运行

  • 页面将检查会话数组是否存在
  • 如果是,则从现有会话创建数组变量
    如果否,则创建一个新数组
  • 数组将添加新产品的详细信息
  • 如果阵列中的现有产品超过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>";
    }
    ?>

大致正确-只需更改两行即可

  • 在array_unshift和array_pop周围不需要额外的array()
  • 当您使用array\u unshift时,您正在推送一个项目数组(而不是单独的id/代码)-我想您的意思是
    array\u unshift($RView,array($prodid,$name,…)
  • 如果$RView没有5个元素呢?在这种情况下,您正在访问未定义的数组索引(可能显示错误,也可能不显示错误)。将其更改为foreach循环:例如
    foreach($Rview as$prod)echo$prod['Name']…
  • 在您进行这些更改后,它应该会工作。不过,您可能需要稍微整理一下编码样式:)


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

    • 在数组\u取消移位时向数组添加索引:
      array\u unshift($RView,array(“ProdID”=>$row\u rsProd[“ProdID”],“Name”…))

    • 如果row\u rsProd不是太大,您可以将整个row\u rsProd钉在$RView上。
      因此,将array_unshift(…)更改为just
      $RView[]=$row\u rsProd

      这样就保留了索引

    • 或者,您可以更改for循环中的标记以匹配。现在,您解压到$RView上的数组是基于0的-$RView[0][0]是第一个产品的产品ID,等等。
      因此,您可以将foreach循环中的内容更改为
      echo“
    • …”$prod[0]$prod[1]$prod[2]

    希望有帮助

    谢谢你的帮助。我已经做了您建议的更改(我想),但是我无法显示数组中的值。我刚刚得到5个项目符号的HTML列表。我所做的改变是。。。数组_unshift($RView,数组($row_rsPrd['PrdID'],$row_rsPrd['RefCode'],$row_rsPrd['Name']);--如果(sizeof($RView)>5{array_pop($RView);}--foreach($RView作为$prod){echo“
      “echo”
    • :“$prod[“Name”]。”
    • “echo”
    ”;}。知道怎么了吗?谢谢你的帮助
    我已经做了您建议的更改(我想),但是我无法显示数组中的值。我刚刚得到5个项目符号的HTML列表
    我所做的更改是…

    数组取消移位($RView,array($row_rsPrd['PrdID'],$row_rsPrd['RefCode'],$row_rsPrd['Name'])
    --

    如果(sizeof($RView)>5)
    {array_pop($RView);


    foreach($RView as$prod){
    echo“
      ”;
      echo”
    • :“$prod[“Name”]。”

    • echo”


    知道怎么了吗?对不起,上面的文字太乱了,但我还是遗漏了一些东西,或者不可能使用“添加评论”以可读的格式编写回复。感谢提供更多信息。你的第一个要点解决方案成功了。数组_unshift($RView,数组(“PrdID”=>$row_rsPrd['PrdDetID'],“RefCode”=>)。。。