无法在 if 语句之外访问全局数组?
Can't access global array outside of an if statement?
我在 php 中设置全局数组时遇到一些问题。我从 $_POST 获得的数据直接来自我的数据库。我通过外部页面将其发送到 JSON decode/etc。 (那部分有效,所以我没有粘贴代码)。我只想在设置数据时执行此操作,然后我想获取该数组并在我的其余代码中使用它做其他事情。我遇到的问题是 if 语句之外的数组为空。我似乎无法弄清楚为什么?如果我要在 if 语句中回显 var_dump,则值在 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();
我在 php 中设置全局数组时遇到一些问题。我从 $_POST 获得的数据直接来自我的数据库。我通过外部页面将其发送到 JSON decode/etc。 (那部分有效,所以我没有粘贴代码)。我只想在设置数据时执行此操作,然后我想获取该数组并在我的其余代码中使用它做其他事情。我遇到的问题是 if 语句之外的数组为空。我似乎无法弄清楚为什么?如果我要在 if 语句中回显 var_dump,则值在 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();