str_repeat和负数

时间:2013-08-04 05:37:13

标签: php

我知道str_repeat无法处理负数;我确实有一个解决我现在遇到的问题的工作,但是工作只能在我的测试服务器上工作...无论如何我遇到的问题是我的网站的健康显示系统。我有它,所以如果用户的健康状况低于0,它会显示“住院”,如果它高于0,则表示有几颗心。 但代码神秘地停止工作,现在只是给我这个错误: 警告:str_repeat():第53行/home5/thehave8/public_html/gmz1023/includes/class/template_engine.php中第二个参数必须大于或等于0

我认为这个数字是负数。

        $vitals = parent::userVitals($uid);
    $hearts = round($vitals['health']/15);
    if($hearts <= 0)
    {
        $health = 'hospitalized';
    }
    if($hearts >= 10)
    {
        $health = str_repeat('&hearts;', 13);
        $health .= '+';
    }
    if($hearts < 10)
    {
        $health = str_repeat('&hearts;', $hearts);
    }
    return $health;

2 个答案:

答案 0 :(得分:1)

使用elseif。当$hearts小于或等于零时,您的代码当前正在执行第一个和第三个if语句。使用elseif,如果第一个if语句匹配,则不会执行第三个if语句。请参阅the docs for elseif

$hearts = round($vitals['health']/15);
if($hearts <= 0)
{
    $health = 'hospitalized';
}
elseif($hearts >= 10)
{
    $health = str_repeat('&hearts;', 13);
    $health .= '+';
}
elseif($hearts < 10)
{
    //Now this is actually more than 0 and less than 10
    //You could even use else here
    $health = str_repeat('&hearts;', $hearts);
}
return $health;

答案 1 :(得分:0)

您正在检查$hearts <= 0,然后直接检查$hearts <10,这也是正确的 - 这就是您的错误所在。

试试这个:

if(($hearts < 10) && ($hearts >0))
{
    $health = str_repeat('&hearts;', $hearts);
}