2013-08-04 3 views
1

Я знаю, что str_repeat не может обрабатывать отрицательные числа; и у меня действительно была работа вокруг проблемы, которую я получил прямо сейчас, однако работа вокруг работала только на моем тестовом сервере ... в любом случае проблема, с которой я сталкиваюсь, связана с системой отображения работоспособности для моего сайта. У меня это так, если здоровье пользователя опускается ниже 0, оно говорит «Госпитализировано», и если его выше 0, он показывает пару сердец. , но код таинственным образом перестает работать и теперь просто дает мне эту ошибку: Предупреждение: str_repeat(): Второй аргумент должен быть больше или равен 0 в /home5/thehave8/public_html/gmz1023/includes/class/template_engine.php в строке 53str_repeat и отрицательные числа

, которую я считаю, что число отрицательное.

 $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; 
+0

Попробуйте 'else if' вместо' if' для второй и третьей проверки. – DCoder

ответ

0

Вы проверки $hearts <= 0, а затем снижается до проверки на $hearts <10, что также верно - вот где ваша ошибка.

Попробуйте это:

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

Используйте ElseIf. В настоящее время ваш код выполняет как первый, так и третий if-statement, когда $hearts меньше или равен нулю. С elseif, третий оператор 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; 
+0

Это сделало это. Спасибо! Я думаю, что у меня в оригинале было это как оператор elseif, но вернул код в более раннее состояние. которые не съели вещи. – Gmz1023

Смежные вопросы