2

我正在尝试在 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>
4

3 回答 3

1

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

$_SESSION["myStack"] = array();
$_SESSION["myStack"][] = 1;
$_SESSION["myStack"][] = 2;
于 2012-11-06T09:55:20.857 回答
0

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

于 2012-11-06T09:55:24.190 回答
0

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

<?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>
于 2012-11-06T10:07:25.333 回答