2

我希望能够使用 FOR 循环检查最多但通常少于 6 个连续命名的变量的存在,因此:

for ($i = 0; $i <= 5; $i++) {
   $vartocheck = "$var_".$i;
   if ($vartocheck) {
      echo $vartocheck." exists!";
   }
}

现在我知道上面的方法不起作用,但我不知道如何通过使用 $i 的值来引用和检查 $var_0 到 $var_5 的存在。

我已经尝试过 isset 和 call_user_func 来构造并返回我所追求的变量名,但到目前为止我还没有成功。

我试图避免使用 eval 语句。

4

5 回答 5

2

不要这样做(因为通过名称动态检查变量的存在是错误的),但可以使用例如:

isset($$vartocheck);

回应您的评论,这有效:

<?php
    $var = 'abc';
    var_dump(isset($$var)); // bool(false)
    $abc = 1;
    var_dump(isset($$var)); // bool(true)

检查 $vartocheck 中是否没有特殊字符(空格等),或者变量是否真的是字符串。

于 2012-11-06T21:20:17.020 回答
1

您可以使用$$var_name

修改后的代码版本:

for ($i = 0; $i <= 5; $i++) {
   $vartocheck = "var_".$i;
   if (isset($$vartocheck)) {
      echo $vartocheck." exists!";
   }
}

ps:使用数组+1。

于 2012-11-06T21:23:35.223 回答
1

最直接的方法看起来是:

for ($i = 0; $i <= 5; $i++) {
  if (isset(${"var_{$i}"})) {
    echo ${"var_{$i}"}." exists!";
  }
}

注意 :

$hello = 'world';
$world = 'foo';

$$hello === ${$hello} === ${"world"} === $world === 'foo'.

因此,在您的原始代码中,您可以使用:

for ($i = 0; $i <= 5; $i++) {
   $vartocheck = "var_".$i;
   if (isset($$vartocheck)) {
      echo '$'.$vartocheck." exists!";
   }
}
于 2012-11-06T21:33:25.240 回答
1

你可以试试

$var_4 = "Test";
for($i = 0; $i <= 5; $i ++) {
    $vartocheck = "var_" . $i;
    if (isset(${$vartocheck})) {
        echo $vartocheck, " exists!";
    }
}

输出

var_4 exists!
于 2012-11-06T21:22:11.163 回答
0

不要这样做。按名称动态检查变量的存在是一种不好的做法,但如果必须这样做,可以通过以下方式完成:

isset($$vartocheck);

但是,正如@paolo-bergantino 在评论中指出的那样,使用数组来处理这样的事情要好得多。

于 2012-11-06T21:24:18.553 回答