基于数组长度的函数条件

时间:2015-10-22 16:22:13

标签: php

标题可能听起来......琐碎,但我不知道如何用一句话来命名这个问题。

我的文件中的不同位置有不同的变量数组 例如:

//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)

...但是当用户可以设置变量时,该解决方案是否安全?有更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

由于输入数据的限制,如上面的评论所述(所有$array条目评估为true),目前还不完全清楚您的计划意图是什么。

但是以下序列会替换你的循环,它会产生与eval s相同的结果:

$status = false;
while(++$i < $x) {
    $status = $status || $array[$i];
    if ($status) echo 'lol';
}