Php Can';是否在if语句之外访问全局数组?

Php Can';是否在if语句之外访问全局数组?,php,arrays,scope,global,Php,Arrays,Scope,Global,我在php中设置全局数组时遇到一些问题。我从$\u POST获得的数据直接来自我的数据库。我通过一个外部页面将其发送到JSON decode/etc(这部分工作正常,所以我没有粘贴代码)。我只想在设置了数据的情况下执行此操作,然后我想在代码的其余部分中使用该数组并执行其他操作。我遇到的问题是if语句外部的数组为null。我似乎不明白为什么?如果要在If语句中回显var_转储,则值位于GLOBALS['Array'中 function is_assoc($array) { foreach

我在php中设置全局数组时遇到一些问题。我从$\u POST获得的数据直接来自我的数据库。我通过一个外部页面将其发送到JSON decode/etc(这部分工作正常,所以我没有粘贴代码)。我只想在设置了数据的情况下执行此操作,然后我想在代码的其余部分中使用该数组并执行其他操作。我遇到的问题是if语句外部的数组为null。我似乎不明白为什么?如果要在If语句中回显var_转储,则值位于GLOBALS['Array'中

 function is_assoc($array) {
   foreach (array_keys($array) as $k => $v) {
     if ($k !== $v)
      return true;
     }
     return false;
   }

$GLOBALS['Array'] = array(); 

if (isset($_POST['data'])) {
   $Data = $_POST['data'];

   $decode = new JSONdecoder($Data);
   $decode->decodeNew($Data);
   $Data = $decode->decodedArray;

   $decryptor = new DataDecryptor(base64_decode($_POST['key']), $_POST['tracking'], $hostName);
   $decodedData =  $decryptor->decrypt_arr($Data);

   foreach($decodedData as $key => $val){
      if(is_assoc($val)){
         foreach($val as $key2 => $val2){
            $theArray[$key2] = $val2;
         }      
      }else{
         $theArray[$key] = $val;
      }
    }

 $GLOBALS['Array'] = $theArray;
}
echo var_Dump($Array);

你的问题在别的地方$GLOBALS是可以从任何范围访问的超全局变量

在$GLOBALS中定义一个新条目时,它会自动创建一个具有相同名称的变量,但该变量仅在该特定范围内可见。如果您在另一个作用域中,并且希望将其初始化为变量,则需要使用
global
关键字:
global$var(查看下面的代码以获取示例-在
test()函数中)

您是否100%确定始终在进行相同的测试(您是否100%确定在测试时始终在输入
foreach
语句?)

要澄清$GLOBALS的行为,请执行以下操作:

<?php

$GLOBALS['foo'] = 'bar';

var_dump($foo); // outputs 'bar'

if (true) {
    $GLOBALS['foo'] = 'bar2';
}

var_dump($foo); // outputs 'bar2'

function test() {
    var_dump($foo); // notice undefined variable - outputs NULL
    var_dump($GLOBALS['foo']); // outputs 'bar2'
    global $foo;
    var_dump($foo); // outputs 'bar2';
}

test();

您的问题在其他地方$GLOBALS是可以从任何范围访问的超全局变量

在$GLOBALS中定义一个新条目时,它会自动创建一个具有相同名称的变量,但该变量仅在该特定范围内可见。如果您在另一个作用域中,并且希望将其初始化为变量,则需要使用
global
关键字:
global$var(查看下面的代码以获取示例-在
test()函数中)

您是否100%确定始终在进行相同的测试(您是否100%确定在测试时始终在输入
foreach
语句?)

要澄清$GLOBALS的行为,请执行以下操作:

<?php

$GLOBALS['foo'] = 'bar';

var_dump($foo); // outputs 'bar'

if (true) {
    $GLOBALS['foo'] = 'bar2';
}

var_dump($foo); // outputs 'bar2'

function test() {
    var_dump($foo); // notice undefined variable - outputs NULL
    var_dump($GLOBALS['foo']); // outputs 'bar2'
    global $foo;
    var_dump($foo); // outputs 'bar2';
}

test();

$Array未在这段代码中设置..最后一行应该是
echo var_dump($GLOBALS['Array'])
Sry,您是指最后一条echo var_Dump($Array);?我想,当你引用函数外部的全局变量时,你只是把它叫做变量名而不是你现在拥有的。谢谢,它起作用了。但公平地说,我引用的网站是误导性的$此代码段中未设置数组。最后一行应为
echo var_dump($GLOBALS['Array'])
Sry,您是指最后一条echo var_Dump($Array);?我想,当你引用函数外部的全局变量时,你只是把它叫做变量名而不是你现在拥有的。谢谢,它起作用了。但公平地说,我引用的网站是误导性的。。。你说得对,我发现了错误,真不敢相信我有多傻。它不起作用的原因是,包含PHP代码的页面是通过javascript/AJAX函数调用访问的。出于某种原因,我忘记了AJAX调用无法访问PHP页面的其余部分。它只能访问随调用发送的参数。这就是为什么当我访问全局变量时,它会一直显示null$_POST['data']不是与AJAX调用一起发送的,因此从一开始它就是空的。你是对的,我发现了错误,无法相信我是多么愚蠢。它不起作用的原因是,包含PHP代码的页面是通过javascript/AJAX函数调用访问的。出于某种原因,我忘记了AJAX调用无法访问PHP页面的其余部分。它只能访问随调用发送的参数。这就是为什么当我访问全局变量时,它会一直显示null$_POST['data']没有随AJAX调用一起发送,因此从一开始它就是空的。