array_rand在条件语句中不起作用

时间:2013-10-12 07:20:26

标签: php arrays random conditional-statements

我在foreach循环中工作,并尝试将我的array_rand放在if语句中。 if语句中的将不起作用,但是如果我将它从if语句中取出(原样),它就可以工作。并且,顺便说一句,这在foreach循环的内部和外部都是正确的。无论我在循环之前还是之后放置它,它都不会在if语句中起作用。但是如果我把它从if语句中删除,它将在循环之前或之后工作。

foreach($files as $file) {
$randcolor = array("red","green","blue","yellow","brown","black","orange","white","silver","purple","pink");
    if(isset($color)) {
        $color = $color;
    }
    else {
        $color = $randcolor[array_rand($randcolor)];
    }

    ... bunch of other stuff

}

我尝试在自己的if($color === 'red'){etc.}语句中拼写出每种颜色。我试过if(!$color){$color = $randcolor[array_rand($randcolor)];}没什么用。它在if语句中不起作用。如果我把它拿出来,它可以工作,但是我不能用$ color属性定义特定的颜色了。奇怪的是,即使我在无条件的array_rand语句之后定义了特定的颜色,它仍然会接管并覆盖任何其他颜色规范。

编辑忘记提及“不会工作”我的意思是,它根本不输出任何字符串。只是空白。

更新

为清楚起见:$ color是短代码中的一个属性,因此它由短代码本身定义。

更新2

我在长短代码的末尾输出了这个,其中return $thefiles其中$thefiles =一个长html字符串,其中包含div类中的$ color。

**更新3 ** 更多代码:

foreach($files as $file) {
        $randcolor = array("red","green","blue","yellow","brown","black","orange","white","silver","purple","pink");
        if(!($color)){$color = $randcolor[array_rand($randcolor)];}


        $thefiles .= '<a id="sssf" style="width:'.$width.$perpx.'" class="'.$style.$corners.'" href="'.$link.'" download><div class="sssf-filetype sssf-'.$color.'"><div class="sssf-label">'.$ftype.'</div></div>'.$cleanName.' <span style="float:right;">'.$fsize.'</span></a>';

    unset($color);
        }

    }

return $thefiles;

}

2 个答案:

答案 0 :(得分:1)

isset用于检查变量是否为NULL。在您的情况下,$color的值为NULL,因为您的if条件未执行。如果您放置$color = ''或定义属性$color,则代码应该有效。

我尝试过,它对我有用:http://phpfiddle.org/main/code/kwx-511

答案 1 :(得分:1)

尝试类似:

$randcolor = array("red","green","blue","yellow","brown","black","orange","white","silver","purple","pink");
$useColor = $color;
if(!($color)){
    $useColor = $randcolor[array_rand($randcolor)];
}

$thefiles .= '<a id="sssf" style="width:'.$width.$perpx.'" class="'.$style.$corners.'" href="'.$link.'" download><div class="sssf-filetype sssf-'.$useColor.'"><div class="sssf-label">'.$ftype.'</div></div>'.$cleanName.' <span style="float:right;">'.$fsize.'</span></a>';

但是在foreach()循环中定义$ randcolor :因为它没有改变,所以你不需要为每个文件重新定义它