我希望能够使用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声明。
答案 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在评论中指出的那样,对于像这样的事情使用数组你会好得多。