【问题标题】:Stack array losing previous values for single page submission堆栈数组丢失单页提交的先前值
【发布时间】:2012-10-26 06:06:45
【问题描述】:

我正在尝试在 PHP 中执行 push-and-pop 堆栈数组,但只存储最后一个值。即使我再次单击按钮并加载同一页面,我如何也可以存储其他值? 这就是我所做的:

<?php
    if(!$_GET)
        $myStack = array();
    else
        $myStack[] = "";
?>

<html>
<head> <title>Exercise</title>
</head>
<body>
    <form action="test.php" method="get">
        Element: <input type="text" name="num"  value="0"/><br/>
        <input type="submit" name="push" value="push" />
        <input type="submit" name="pop" value="pop" />
    </form>

<?php

    if(isset($_GET["push"])){
        array_push($myStack, $_GET["num"]);
        foreach($myStack as $val)
            echo $val . " ";
    }
    elseif(isset($_GET["pop"])){
        array_pop($myStack);
        foreach($myStack as $val)
            echo $val . " ";
    }
?>
</body>
</html>

【问题讨论】:

  • 你的值没有存储在 HTTP 请求之间,你必须使用 Session 变量来存储它们

标签: php arrays stack


【解决方案1】:

每个 http 请求 php 都会从头开始执行带有所有变量的脚本。您必须使用 $_SESSIONstatic 变量来保存请求之间的值。
要将数组存储在$_SESSION 中,只需将其分配给键:

$_SESSION["myStack"] = array();
$_SESSION["myStack"][] = 1;
$_SESSION["myStack"][] = 2;

【讨论】:

  • 我之前尝试过使用 SESSION 但我不知道如何在其上存储多个值.. 我只能存储 1,而不是数组.. 请演示..
  • 哇.. 推送成功了.. 我做到了:
  • 谢谢!再多一点:如何做流行音乐?或者我如何从会话中删除最后一个值?
  • array_pop($_SESSION['myStack'])
  • 哇.. 成功了.. 非常感谢! :)
【解决方案2】:

您的脚本顶部有一个重置。重新加载后,您的堆栈将是空的。您还必须将堆栈保存到会话变量中。

【讨论】:

    【解决方案3】:

    这是使用会话存储数组的代码:

    <?php
    //starts the session
    session_start();
    $myStack = array();
    
    //gets the array from the session if it exists
    if (isset($_SESSION['stack']))
        $myStack = $_SESSION['stack'];
    
    ?>
    <html>
        <head> <title>Exercise</title>
    </head>
    <body>
    <form action="test.php" method="get">
        Element: <input type="text" name="num"  value="0"/><br/>
        <input type="submit" name="push" value="push" />
        <input type="submit" name="pop" value="pop" />
    </form>
    
    <?php
    
    if(isset($_GET["push"])){
        array_push($myStack, $_GET["num"]);
        foreach($myStack as $val)
            echo $val . " ";
    }
    elseif(isset($_GET["pop"])){
        array_pop($myStack);
        foreach($myStack as $val)
            echo $val . " ";
    }
    
    //stores the array in the opened session
    $_SESSION['stack'] = $myStack;
    ?>
    </body>
    </html>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-21
      • 1970-01-01
      • 2017-05-29
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多