2014-01-17 41 views
1

我有一个简单的PHP脚本来检查数字的范围。出于某种原因,一旦我检查的号码等于100%代码不起作用。这里是我的代码:在PHP中检查数字的范围

$percent_completed = '100%';        

if ($percent_completed <= '20%') { 
    $color = 'danger'; 
} elseif ($percent_completed >= '21%' && $percent_completed < '40%') { 
    $color = 'warning'; 
} elseif ($percent_completed >= '40%' && $percent_completed < '60%') { 
    $color = 'info'; 
} elseif ($percent_completed >= '60%' && $percent_completed < '80%') { 
    $color = 'primary'; 
} elseif ($percent_completed >= '80%' && $percent_completed < '100%') { 
    $color = 'default'; 
} else { 
    $color = 'success'; 
} 

echo $color; 

所有上述工作就好了,直到$percent_completed条件检查等于100%。出于某种原因,它设置为100%$color打印出来的是danger。我相信这是一个简单的修复,但我所尝试过的一切都不起作用。

+2

你应该使用实数而不是字符串。而且,所有双重条件的第一个条件是多余的。 – jeroen

回答

8

从您的$percent_completed变量中删除%变量。它使它成为字符串,它会给你比作为整数(对于数字)进行比较时有不同的结果。

$percent_completed = 100;        

if ($percent_completed <= 20) { 
    $color = 'danger'; 
} elseif ($percent_completed < 40) { 
    $color = 'warning'; 
} elseif ($percent_completed < 60) { 
    $color = 'info'; 
} elseif ($percent_completed < 80) { 
    $color = 'primary'; 
} elseif ($percent_completed < 100) { 
    $color = 'default'; 
} else { 
    $color = 'success'; 
} 

echo $color; 
+2

甚至不需要使用引号。这是一个整数 – Ryan

+1

@Ryan绝对正确。 –

+1

另外,不需要'> ='条件,因为它们已经被满足了。 – jeroen

4

你正在计算一个字符串。

这意味着“2%”实际上高于“100%”(例如)。

删除百分比符号并在输出期间需要时使用它。

1

你可以大大简化这一点。

  • 删除引号(数字为整数)
  • 从您的百分比计算删除%体征
  • PHP正确处理了第一个成功if声明和退出条件。从上到下堆叠,并使用1/2代码。 (或者你可以把它写下来,并用>代替)。

$p = 100;        
if ($p == 100) 
    $color = "success"; 
elseif ($p >= 80) 
    $color = "default"; 
elseif ($p >= 60) 
    $color = "primary"; 
elseif ($p >= 40) 
    $color = "info"; 
elseif ($p > 20) 
    $color = "warning"; 
elseif ($p <= 20) 
    $color = "danger"; 
echo $color; 
2

只是想指出的另一种方法,我张贴的替代解决方案。有时使用简单的代数公式代替大量的if-else条件更具可读性。

//Assign current percent value to a variable 
$percent_completed = 100; 
//Assign an array of all notifications 
$array_notifications = array("danger", "warning", "info", "primary", "default", "success"); 
//Calculate index of current notification 
$current_index = floor($percent_completed/20); 
//Print or do something else with detected notification type 
echo $array_notifications[$current_index]; 
+0

这是一个非常棒的解决方案 - 请注意,它依赖于'$ current_index'既是一个整数,也是'$ array_notifications'范围内的结果。在这种情况下,它总是一个整数,所以没关系。但是,要小心数组的基于0的索引 - 您需要执行一些操作,比如'$ array_notifications [$ current_index - 1]'。 – brandonscript

1

比较百分比串可以工作,如果您使用的是自然秩序比较功能。

自然顺序比较函数将字符串和数字分开,并将数字视为数字而不是字符串。

所以不是:

[ "1", "10", "2" ] 

您将获得:

[ "1", "2", "10" ] 

有些语言有此功能,内置的(如PHP:strnatcmp),但可悲的是JavaScript的没有。编写你自己的实现并不是很难,但也不是很容易。

在这种情况下,我肯定会推荐简化(如约翰的解决方案)。