【问题标题】:PHP Array Losing Values Outside of FunctionPHP 数组在函数之外丢失值
【发布时间】:2012-03-16 19:46:05
【问题描述】:

大家好,我在尝试在 php 中使用全局数组时遇到了一个奇怪的问题。

我什至不想使用全局变量,但这就是我想要做的。

我有两个功能

createMatrix($name) 创建一个 5x5 的文本框矩阵并记住值 loadMatrix($name) 从发布数据中加载一个 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() 时,这些值根本不显示;

【问题讨论】:

  • 我没有看到你在代码的任何地方定义loadMatrix()
  • 在函数内部使用全局变量之前。这样做:global $matrixa;
  • 你也忘记了 ;在 loadMatrix("MatrixA","MatrixB") 结束时
  • 哈哈你们回答的超级快。太棒了:)
  • 我在回头看之前解决了这个问题。 Bjorne Malmanger 是对的。我在每个函数内部声明了全局 $matrixa,它就像一个魅力。谢谢大家的帮助!

标签: php arrays scope


【解决方案1】:

看来你需要使用http://www.php.net/manual/en/reserved.variables.globals.php

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

$GLOBALS['matrixa']

或者在使用前用global定义变量,那么$matrixa、$matrixb将引用全局版本,更多信息here

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

【讨论】:

  • 各位,谢谢。 loadMatrix() 应该是 loadArrays() 我的错,我打算尝试更改它以返回一些值或其他任何东西,但我能够像你说的那样解决问题。基本上我在考虑“全局”这个词(来自 C# 或 C++) 在每个函数内部声明全局而不是在最顶部声明​​全局是我做错的新函数:函数 createMatrix($name) { global $矩阵a,$矩阵b;回声“

    ”。 $名称。 "

    \n";函数 loadArrays($name1,$name2) { 全局 $matrixa, $matrixb;像魅力一样工作!
【解决方案2】:

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

global $variable; $variable=1;

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

【讨论】:

    【解决方案3】:

    您将函数定义为loadArrays() 而不是loadMatrix()

    【讨论】:

      猜你喜欢
      • 2020-01-07
      • 2016-08-31
      • 1970-01-01
      • 2014-01-20
      • 1970-01-01
      • 2010-12-22
      • 2014-01-02
      • 2017-04-02
      相关资源
      最近更新 更多