Предупреждение: деление на ноль в цикле

#php #loops #warnings

#php #циклы #предупреждения

Вопрос:

У меня есть этот код:

 for ($y = 0; $y < $numRows; $y  ) {
    for ($i = 0; $i < $numRows; $i  ) {
        ${'contaH' . $i}[]=${'arrHoriz' . $i}[$y]/$arr[$y];
    }
}

echo $contaH0[0]."n";
  

этот вывод:

 Warning: Division by zero in C:UsersxxVertrigoServwwwAHPnewdemo.php on line 66
Warning: Division by zero in C:UsersxxVertrigoServwwwAHPnewdemo.php on line 66
Warning: Division by zero in C:UsersxxVertrigoServwwwAHPnewdemo.php on line 66
Warning: Division by zero in C:UsersxxVertrigoServwwwAHPnewdemo.php on line 66
0.300618921309 
  

но если я изменю эту строку:

 ${'contaH' . $i}[]=${'arrHoriz' . $i}[$y]/$arr[$y];
  

Для

 ${'contaH' . $i}[]=${'arrHoriz' . $i}[$y]/$arr[0];
  

вывод:

 0.300618921309 
  

В чем причина предупреждения в первом коде?

Комментарии:

1. Разве предупреждение недостаточно очевидно?

2. @ marabutt >>> массив (3) {[0]=> строка(6) «113.1 » [1]=> строка(5) «53.3 » [2]=> строка (3) «46» }

Ответ №1:

Либо $arr в нем не так много элементов, как вы думаете, либо в нем много 0 или пустых элементов.

Ответ №2:

Причина в том, что в вашем цикле $arr[$y] не всегда равно 0. Где-то в вашем массиве это ноль (или не определено). Вы должны проверить, равен ли ваш знаменатель нулю, прежде чем выполнять какое-либо деление, и правильно обработать случай, когда он равен нулю.