当我尝试过滤所有这些参数时,php只会输入第一个if条件,忽略所有其他条件。
if($t_red<0){
$t_red=0;
}
else if($t_red>256){
$t_red=255;
}
else if($t_green<0){
$t_red=0;
}
else if($t_green>256){
$t_red=255;
}
if($t_blue<0){
$t_red=0;
}
if($t_blue>256){
$t_red=255;
}
if($t_red<0){
$t_red=0;
}
答案 0 :(得分:7)
如果通过过滤功能运行,可能是最合适的。
function setParam($param) {
if($param < 0) {
$param = 0;
} elseif($param > 256) {
$param = 255;
}
return $param;
}
$t_green = setParam($t_green);
$t_red = setParam($t_red);
$t_blue = setParam($t_blue);
如有必要,您还可以使用传递引用。
答案 1 :(得分:1)
目前尚不清楚您要尝试做什么,但我认为您希望在第三个else
语句之前移除if
并添加{{ 1}}在第六个else
语句之前。
答案 2 :(得分:0)
$t_red=$t_red<0?0;$t_red;
$t_red=$t_red>=256?255;$t_red;
//are you sure you're modifying t_red here? and not t_green?
$t_red=$t_green<0?0;$t_red;
$t_red=$t_green>=256?255;$t_red;
//are you sure you're modifying t_red here? and not t_blue?
$t_red=$t_blue<0?0;$t_red;
$t_red=$t_blue>=256?255;$t_red;
答案 3 :(得分:0)
成功满足if(或else if if)语句的条件将忽略紧跟其后的所有其他if / else语句,但之后的if语句正在执行 - 您可以通过向每个语句添加echo语句来验证这一点。可能是因为所有变量赋值都是$ t_red所以不对$ t_green或$ t_blue采取任何操作?
答案 4 :(得分:0)
if($t_red < 0)
{
$t_red = 0;
}
else if($t_red > 255) //Original won't catch it if it is == to 256, have to do either >= 256 or > 255
{
$t_red = 255;
}
if($t_green < 0)
{
$t_green = 0;
}
else if($t_green > 255)
{
$t_green = 255;
}
if($t_blue < 0)
{
$t_blue = 0;
}
else if($t_blue > 255)
{
$t_blue = 255;
}
Andrew Sledge的答案是最好的,但是我确实纠正了这样一个事实:如果它是==到256,那么它将错过纠正值,而$var > 256
不会抓住它,因此如果值必须介于0和255之间,则会出错。