PHP数组丢失函数之外的值

时间:2012-03-16 19:46:06

标签: php arrays scope

嘿伙计们我试图在php中使用全局数组时有一个奇怪的问题。

我甚至不想使用全局,但这是我正在尝试做的事情。

我有两个功能

createMatrix($ name),它创建一个5x5的文本框矩阵并记住值 loadMatrix($ name)从post数据加载5x5矩阵。

出于某种原因,在我运行loadMatrix()之后,我设置的值在createMatrix()中丢失了

我已经尝试了大量的调试方法并将我的矩阵变量声明为全局但没有运气。 我知道这是一个范围问题,因为当我尝试在函数之外运行它时,它工作得很好。

<form action="Program4.php" method="post">
<?php
$matrixa = array(array());
$matrixb = array(array());
if($_POST['add'])
    echo "Add Clicked";
if($_POST['subtract'])
    echo "Subtract Clicked";
function loadArrays($name1,$name2) {
        //The Solution: global $matrixa, $matrixb;
    for($x = 0; $x < 5; $x++)
        for($y = 0; $y < 5; $y++) {
            $matrixa[$x][$y] = $_POST[$name1 . $x . $y];
            $matrixb[$x][$y] = $_POST[$name2 . $x . $y];
        }
}
function createMatrix($name) {
        //The Solution: global $matrixa, $matrixb;
    echo "<h2>" . $name . "</h2>\n";
    for($x = 0; $x < 5; $x++)
        echo $matrixa[0][$x];
    echo "<div style=\"border:ridge; border-width:7px; padding:12px; float:left; background-color:gray\">\n";
    for($x = 0; $x < 5; $x++) {
        for($y = 0; $y < 5; $y++) {
            echo "<input type=\"text\" name=\"" . $name . $x . $y . "\" maxlength=\"6\" style=\"width:50px\" value=\"";
            if($name == "MatrixA")
                echo "" . $matrixa[$x][$y];
            else if($name == "MatrixB")
                echo "" . $matrixb[$x][$y];
            echo "\">\n";
        }
        echo "<br>\n";
    }
    echo "</div>\n";
    echo "<br><br><br><br><br><br><br><br><br>\n";
}
loadArrays("MatrixA","MatrixB");
createMatrix("MatrixA");
createMatrix("MatrixB");
?>
<input type="submit" value="Add Matrices" name="add" />
<input type="submit" value="Subtract Matrices" name="subtract" />
</form>

这个项目将在午夜到期,所以我很感激一些帮助:)

基本上问题是试图保存值。 我可以使用loadArrays()将后置数据中的变量加载到数组中,但是当我使用createMatrix()时,值不会显示在AT中;

3 个答案:

答案 0 :(得分:1)

您似乎需要使用http://www.php.net/manual/en/reserved.variables.globals.php

您可以使用$GLOBALS变量从全局范围中获取变量

$GLOBALS['matrixa']

或使用global之前定义变量,然后$ matrixa,$ matrixb将引用全局版本,更多信息here

function createMatrix() {
    global $matrixa, $matrixb;
} 

答案 1 :(得分:0)

为了使用函数内部生成的变量,必须将其定义为全局变量。

global $variable; $variable=1;

在你的第二个函数中,你还必须告诉$ variable是全局的。函数的变量仅以局部方式处理,并专门用于函数本身。

答案 2 :(得分:0)

您将该功能定义为loadArrays()而非loadMatrix()