【发布时间】: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,它就像一个魅力。谢谢大家的帮助!