Область действия массива в цикле PHP foreach


Я изучаю PHP и мучаюсь над тем, как правильно написать свой код. У меня есть текстовая область, которая принимает ввод пользователя, который представляет собой несколько строк координат (PT# Север-Восток), разделенных пробелами.

У меня есть форма, передающая ввод текстовой области в php-скрипт для ее обработки.

Я могу заставить цикл foreach делать именно то, что я хочу, но только локально для цикла foreach, переменные не передаются за пределы цикла.

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

Ниже приведен мой PHP-код, я опустил HTML-форму, у меня с ней нет проблем, и я знаю, что текстовая область передается правильно.

**Sample data that I am inputing:
1 728258.24000 774337.29700
2 728232.15735 774277.54650
3 728326.39614 774216.82428**

<?php

$i = 0;
$j = 0;

//The code below explodes my textarea into a string array
//of separated lines.
$textArea = explode("\r", $_POST['textArea']);
$textNum = array();

//The code below works internally, but the values remain here
//I wanted to get them to the variables below so I can do work
//to them.
foreach ($textArea as $textRows) {

    //The code below explode the lines into elements separated by a space
    $textRow = explode(" ", $textRows);
    foreach ($textRow as $textItem) {
    $textNum[i][j] = $textItem;

    //The code below works within a local context
    echo "(" . $i . " " . $j . ")" . $textNum[i][j] . "</br>";
    $j++;
    }
    $i++;
    $j = 0;
}

//The code below is not receiving values from the foreach loop
//I know this has something to do with the variable scope
//I must be way off in my approach any help would be appreciated!
echo "</br>";
echo "</br> 0 0 " . $textNum[0][0];
echo "</br> 0 1 " . $textNum[0][1];
echo "</br> 0 2 " . $textNum[0][2];
echo "</br> 1 0 " . $textNum[1][0];
echo "</br> 1 1 " . $textNum[1][1];
echo "</br> 1 2 " . $textNum[1][2];
echo "</br> 2 0 " . $textNum[2][0];
echo "</br> 2 1 " . $textNum[2][1];
echo "</br> 2 2 " . $textNum[2][2];
echo "</br> 3 0 " . $textNum[3][0];
echo "</br> 3 1 " . $textNum[3][1];
echo "</br> 3 2 " . $textNum[3][2];
?>

Я надеюсь, что объяснил это достаточно хорошо, и ценю любую помощь, которую я могу получить! Спасибо!

Author: sean2me, 2012-07-02

2 answers

Вам нужно добавить $ перед вашими переменными, т.Е. $textNum[$i][$j] вместо $textNum[i][j], также лучше инициализировать $i и $j и установить их в 0 перед циклом foreach.

 0
Author: aziz punjani, 2012-07-02 19:18:32

Во втором цикле произошла ошибка:

$textNum[i][j] = $textItem;

Должно быть:

$textNum[$i][$j] = $textItem;
 2
Author: jexact, 2012-07-02 19:20:19