Потеря значений массива PHP вне функции - PullRequest
1 голос
/ 16 марта 2012

Эй, ребята, у меня странная проблема при попытке использовать глобальный массив в php.

Я даже не хочу использовать глобальный массив, но вот что я пытаюсь сделать.

У меня есть 2 функции

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 ();

Ответы [ 3 ]

1 голос
/ 16 марта 2012

Похоже, вам нужно использовать http://www.php.net/manual/en/reserved.variables.globals.php

Вы можете использовать переменную $GLOBALS, чтобы получить переменные из глобальной области видимости

$GLOBALS['matrixa']

или определить переменные с помощью global перед его использованием, $ matrixa, $ matrixb будет ссылаться на глобальные версии, подробнее здесь

function createMatrix() {
    global $matrixa, $matrixb;
} 
0 голосов
/ 17 марта 2012

Вы определили функцию как loadArrays() вместо loadMatrix().

0 голосов
/ 16 марта 2012

Чтобы использовать переменные, сгенерированные внутри функции, вы должны определить ее как глобальную переменную.

global $variable; $variable=1;

внутри вашей второй функции вы также должны сказать, что переменная $ является глобальной.В противном случае переменные функции обрабатываются только локально и используются специально для самой функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...