标题可能听起来......琐碎,但我不知道如何用一句话来命名这个问题。
我的文件中的不同位置有不同的变量数组 例如:
//set1:
$a =1;$b=2;$c=3;$d=4;$e=5;
$set1 =array($a,$b,$c,$d,$e);
//set2:
$x=1;$y=2;
$set2 =array($x,$y);
我试着'编写一个函数,根据数组长度进行不同的操作。
对于(简化)示例,在第一种情况下,我想执行:
if($set1[0]){/*something*/}
if($set1[0] || $set1[1]){}
if($set1[0] || $set1[1] || $set1[2]){}
if($set1[0] || $set1[1] || $set1[2] || $set1[3]){}
if($set1[0] || $set1[1] || $set1[2] || $set1[3] || $set1[4]){}
在第二种情况下,我想执行
if($set2[0]){}
if($set2[0] || $set2[1]){}
我尝试使用eval()编写函数,它可以工作......
function _f($array)
{
$i =-1;
$x =count($array);
$str ='';
$str2 ='';
while(++$i < $x)
{
if($i ==0){
$str .="\$array[$i]";
} else {
$str .=" || \$array[$i]";
}
$str2 .="if(".$str."){\n echo 'lol'; \n}\n\n";
}
echo "<pre>";
echo $str2;
echo "</pre>";
eval($str2);
}
_f($set1);
//output: lollollollollol (as I expected)
...但是当用户可以设置变量时,该解决方案是否安全?有更好的解决方案吗?
答案 0 :(得分:0)
由于输入数据的限制,如上面的评论所述(所有$array
条目评估为true
),目前还不完全清楚您的计划意图是什么。
但是以下序列会替换你的循环,它会产生与eval
s相同的结果:
$status = false;
while(++$i < $x) {
$status = $status || $array[$i];
if ($status) echo 'lol';
}