Предупреждение: встречено нечисловое значение

Недавно обновлено до PHP 7.1 и начать получать следующую ошибку

Предупреждение. Нелинейное значение, встречающееся в строке 29

Вот как выглядит строка 29

$sub_total += ($item['quantity'] * $product['price']); 

На локальном хосте все работает отлично ..

Любые идеи, как решить это или что это такое?

Похоже, что в PHP 7.1 предупреждение будет выпущено, если встречается нечисловое значение. См. Эту ссылку .

Вот соответствующая часть, относящаяся к уведомлению о предупреждении, которое вы получаете:

Новые ошибки E_WARNING и E_NOTICE были введены, когда недействительные строки принудительно используются операторами, ожидающими числа или их эквиваленты присваивания. E_NOTICE испускается, когда строка начинается с числового значения, но содержит конечные нечисловые символы, и E_WARNING испускается, когда строка не содержит числовое значение.

Я предполагаю, что либо $ item ['quantity'], либо $ product ['price'] не содержит числового значения, поэтому убедитесь, что они делают это, прежде чем пытаться их умножить. Может быть, использовать некоторый условный сигнал перед вычислением $ sub_total, например:

 <?php if (is_numeric($item['quantity']) && is_numeric($product['price'])) { $sub_total += ($item['quantity'] * $product['price']); } else { // do some error handling... } 

Вы можете решить проблему без какой-либо новой логики, просто введя вещь в число, что предотвращает предупреждение и эквивалентно поведению в PHP 7.0 и ниже:

 $sub_total += ((int)$item['quantity'] * (int)$product['price']); 

(Ответ от Daniel Schroeder не эквивалентен, потому что $ sub_total будет оставаться неустановленным, если встречаются нечисловые значения. Например, если вы распечатываете $ sub_total, вы получите пустую строку, что, вероятно, неверно в счете-фактуре. вы должны убедиться, что $ sub_total является целым числом.)

Не совсем такая проблема, как у вас, но такая же ошибка для поиска людей.

Это случилось со мной, когда я потратил слишком много времени на JavaScript.

Возвращаясь к PHP, я конкатенировал две строки с «+» вместо «.». и получил эту ошибку.

Попробуй это.

 $sub_total = 0; 

и теперь в вашем цикле вы можете использовать это

 $sub_total += ($item['quantity'] * $product['price']); 

Он должен решить вашу проблему.

Проверьте, не увеличиваете ли вы какую-то переменную, что ее значение представляет собой пустую строку типа ''.

Пример:

 $total = ''; $integers = range(1, 5); foreach($integers as $integer) { $total += $integer; } 

Я просто посмотрел на эту страницу, поскольку у меня была эта проблема. Для меня у меня были числа с плавающей запятой, рассчитанные из массива, но даже после обозначения переменных как плавающих точек ошибка все еще была указана, вот простой код ошибки и примера, под которым возникла проблема.

Пример PHP

 <?php $subtotal = 0; //Warning fixed $shippingtotal = 0; //Warning fixed $price = array($row3['price']); $shipping = array($row3['shipping']); $values1 = array_sum($price); $values2 = array_sum($shipping); (float)$subtotal += $values1; // float is irrelevant $subtotal creates warning (float)$shippingtotal += $values2; // float is irrelevant $shippingtotal creates warning ?> 
 $sn = 0;//increment the serial number, then add the sn to job for($x = 0; $x<20; $x++) { $sn++; $added_date = "10/10/10"; $job_title = "new job"; $salary = $sn*1000; $cd = "27/10/2017";//the closing date $ins = "some institution";//the institution for the vacancy $notes = "some notes here";//any notes about the jobs $sn_div = "<div class='sn_div'>".$sn."</div>"; $ad_div = "<div class='ad_div'>".$added_date."</div>"; $job_div = "<div class='job_div'>".$job_title."</div>"; $salary_div = "<div class='salary_div'>".$salary."</div>"; $cd_div = "<div class='cd_div'>".$cd."</div>";//cd means closing date $ins_div = "<div class='ins_div'>".$ins."</div>";//ins means institution $notes_div = "<div class='notes_div'>".$notes."</div>"; /*erroneous line*/$job_no = "job"+$sn;//to create the job rows $$job_no = "<div class='job_wrapper'>".$sn_div.$ad_div.$job_div.$salary_div.$cd_div.$ins_div.$notes_div."</div>"; echo $$job_no;//and then echo each job } 

это код, который у меня был, который зацикливал и создал новые элементы html div. Код работал нормально, и элементы были сформированы, но я получил то же предупреждение в error_log.

Прочитав полезные другие ответы, я подумал, что я суммирую строку и число в ошибочной строке. Поэтому я изменил код на этой строке, чтобы

 /*erroneous line*/$job_no = "job"&&$sn;//this is the new variable that will create the job rows 

Теперь код работает как раньше, но без предупреждений на этот раз. Надеюсь, этот пример был бы полезен кому-то.