Глобальный массив PHP не отображается - PullRequest
0 голосов
/ 14 февраля 2012

Рассмотрим следующую функцию, которая заполняет массив строками (вопросами):

global $questions;
function printQuestions($lines){
    $count = 1;
    foreach ($lines as $line_num => $line) {
        if($line_num%3 == 1){
            echo 'Question '.$count.':'.'<br/>'.'<input type="text" value="' . $line . '" class="tcs"/>'.'<br/>';
            $count++;
            $questions[] = $line;
        }
    }
}

Массив вопросов определен как глобальный, но он недоступен вне функции.Следующий блок кода, расположенный в нижней части страницы, ничего не возвращает:

<?php
    if(isset($_POST['Submit'])){
        foreach($questions as $qs)
            echo $qs;   
        }
?>

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

Ответы [ 2 ]

8 голосов
/ 14 февраля 2012

Вам следует переместить global внутри функции.

function printQuestions($lines){
    global $questions;
    // ...

Ключевое слово global переносит глобальную переменную в локальную область, так что вы можете работать с ней.Если вы не используете global в функции printQuestions() для переноса глобальной переменной $questions в область действия функции, тогда $questions будет локальной и будет отличаться от глобальной переменной, которую выищу.

1 голос
/ 15 февраля 2012

Вы можете использовать глобальные переменные в PHP как $ GLOBALS ["foo"], поэтому в вашем случае внутри функции замените $ questions на $ GLOBALS ["questions"], и все должно работать.

...