0

可能重复:
在函数中找不到 PHP 全局变量

我有一个从数据库读取数据的函数。我有一个数组,我想将数据库中的数据放入其中以便于操作。我在函数外部定义我的数组并在调用函数时填充它。

$rid = "";
if(isset($_GET['rid'])){
  $rid = $_GET['rid'];
}

$dates = array();    
function getData($rid){
  //Db Connection Strings
  //Query stuff etc

  //DATES
  for ($i=0; $i < 5; $i++) { 
    $mil = (float)$query->table->records->record->f[$i];
    $seconds = $mil / 1000;
    $dt = gmdate('m-d-Y', $seconds);

    $dates[$i] = $dt;
  }  
  print_r($dates);//THIS WORKS
}

getData($rid);
print_r($dates);//THIS DOESN'T

我的问题是:除非我在函数中调用引用 $dates,否则它不会吐出我的数据。我需要在函数外部完成此操作,以便在运行时将值放入文本字​​段中。

如何将我的值放入我的 $dates 数组中,以便它们可以在全球范围内使用?谢谢!

4

4 回答 4

4

您可以通过三种基本方式来执行此操作:通过引用传递数组、全局调用它以及从函数中返回它。

通过引用传递

function getData($rid, &$dates) {
    ...
    for ($i=0; $i < 5; $i++) { 
        ...
        $dates[$i] = $dt;
    }
}

getData($rid, $dates);

返回

function getData($rid) {
    $dates = array();
    ...
    for ($i=0; $i < 5; $i++) { 
        ...
        $dates[$i] = $dt;
    }
    return $dates;
}

$dates = getData($rid);

全局变量

function getData($rid){
    global $dates;
    ...
    for ($i=0; $i < 5; $i++) { 
        ...
        $dates[$i] = $dt;
    }  
}
于 2012-11-02T19:26:51.517 回答
2

这是一个范围界定问题。您应该将日期作为参考传递,或者将日期数组作为函数的结果返回。

function getData($rid){
   //Do whatever you need to do.
   return $dates;
}


$dates = getData($rid);
print_r($dates);
于 2012-11-02T19:27:44.753 回答
2

只需从函数返回,而不是依赖全局数据:

function getData($rid) {
    // ...
    return $dates;
}
print_r(getData($rid));

之前的$dates函数没用,把它移到函数内部来正确初始化它。

于 2012-11-02T19:27:49.063 回答
1

在您的函数中声明以下内容:

global $dates;

这将使用全局变量dates而不是创建局部变量并使用它,这就是现在正在发生的事情。

于 2012-11-02T19:27:24.977 回答