检查另一个变量是否存在时如何使用一个变量的值

时间:2012-11-06 21:16:54

标签: php

我希望能够使用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声明。

5 个答案:

答案 0 :(得分:2)

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

isset($$vartocheck);

回复您的评论,这有效:

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

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

答案 1 :(得分:1)

你可以尝试

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

输出

var_4 exists!

答案 2 :(得分:1)

您可以使用$$var_name

修改后的代码版本:

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

ps:+1使用数组。

答案 3 :(得分: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!";
   }
}

答案 4 :(得分:0)

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

isset($$vartocheck);

然而,正如@ paolo-bergantino在评论中指出的那样,对于像这样的事情使用数组你会好得多。