在PHP中定义一个全局变量

时间:2011-03-15 19:40:43

标签: php mysql

我想在foreach之外使用变量。我怎样才能在PHP中解决这个问题。如何在foreach之外使用$ ID?

foreach($row as $key => $value) {
  $ID = $value['Id'];
}

5 个答案:

答案 0 :(得分:5)

您的$ID变量已经可以在foreach之外使用了:控制结构没有自己的variable scope


作为快速说明,代码的以下部分:

$ID = 0;

$array = array(1, 2, 3);
foreach ($array as $value) {
    $ID = $value;
}

var_dump($ID);

会得到你:

int 3

这表明在$I循环中使用的foreach D变量与该循环外部存在的变量相同。



在评论后进行修改:

在循环之前不初始化变量,你会得到完全相同的结果:变量将在第一次使用时创建 - 并且它将与我发布的示例中的变量相同。


另一个例子,现在,使用foreach循环中的函数(仅适用于PHP> = 5.3)

$array = array(1, 2, 3);
foreach ($array as $value) {
    $func = function () use ($value) {
        $ID = $value;
        var_dump($ID);
    };
    $func();
}

var_dump($ID);

在那里,$ID变量在循环之前没有初始化 - 它是在循环内部的函数中创建的。

此示例将获得以下输出:

int 1
int 2
int 3

( ! ) Notice: Undefined variable: ID ... on line 15

null

基本上:

  • 从函数内部得到三个正确的输出
    • 那些显示匿名函数内的$ID变量正在获取值
  • 但是,在循环之后,您会收到通知:$ID变量不存在。
    • 表明函数内部创建的$ID变量与函数外部的$ID变量不同:函数自带变量范围。

答案 1 :(得分:1)

您可以在foreach之外使用它,变量范围不受语句结构的限制。

另一方面,它们受功能范围的限制。

有关变量范围的更多信息,请参阅手册http://php.net/manual/en/language.variables.scope.php中的此页面。

答案 2 :(得分:0)

$ID = null;
foreach($row as $key => $value) {
  $ID = $value['Id'];
}
//do something with $ID...

这样做的原因是,如果for循环永远不会通过(也就是说,$ row是一个空数组),则永远不会设置$ ID。因此,$ID必须事先设置,否则根本不在范围内,如果您尝试访问$ID的值,则会遇到错误。

答案 3 :(得分:0)

在foreach循环中有一个变量会影响它的范围。您可以自由地在foreach循环之前,之后或之中操纵该变量。

答案 4 :(得分:0)

依次将所有值分配给单个变量没有多大意义 如果你只想要最后一个,可以用

代替
$value = array_pop($row);
$ID = $value['Id'];

但我怀疑这是你真正需要的。你想要解决的整个任务是什么? 可能你想要一个阵列?

$id_arr = array();
foreach($row as $key => $value) {
  $id_arr[] = $value['Id'];
}