Niedawno zaktualizowany do PHP 7.1 i zacznij otrzymywać następujący błąd
Ostrzeżenie: napotkano wartość nienumeryczną w wierszu 29
Oto jak wygląda linia 29
$sub_total += ($item['quantity'] * $product['price']);
Na hoście lokalnym wszystko działa dobrze.
Jakieś pomysły, jak sobie z tym poradzić lub co to jest?
var_dump($item['quantity'], $product['price'])
Odpowiedzi:
Wygląda na to, że w PHP 7.1, jeśli napotkana zostanie wartość nienumeryczna, zostanie wyemitowane Ostrzeżenie. Zobacz ten link .
Oto odpowiednia część dotycząca otrzymanego ostrzeżenia:
Domyślam się, że $ item ['quantity'] lub $ product ['price'] nie zawiera wartości liczbowej, więc upewnij się, że tak jest, zanim spróbujesz je pomnożyć. Może użyć jakiegoś warunku przed obliczeniem $ sub_total, na przykład:
źródło
$sub_total += ((int)$item['quantity'] * (int)$product['price']);
Nie do końca to, co miałeś, ale ten sam błąd w przypadku wyszukiwania osób.
Zdarzyło mi się to, gdy spędziłem zbyt dużo czasu na JavaScript.
Wracając do PHP, połączyłem dwa ciągi z „
+
” zamiast „.
” i otrzymałem ten błąd.źródło
+
, zakłada się, że jest toint
wartość ... podczas gdy podane operandy nie mają żadnego numerycznego typu danych.+
zamiast.
. Dzięki!Możesz rozwiązać problem bez nowej logiki, po prostu rzucając rzecz na liczbę, co zapobiega ostrzeżeniu i jest równoważne zachowaniu w PHP 7.0 i niższych:
(Odpowiedź od Daniela Schroedera nie jest równoważna, ponieważ $ sub_total pozostanie nieustawione, jeśli zostaną napotkane wartości nienumeryczne. Na przykład, jeśli wydrukujesz $ sub_total, otrzymasz pusty ciąg, który prawdopodobnie jest nieprawidłowy na fakturze. rzutując upewniasz się, że $ sub_total jest liczbą całkowitą.)
źródło
W moim przypadku to przeze mnie używany
+
jak w innym języku, ale w PHP jest to operator konkatenacji.
.źródło
Przydarzyło mi się to szczególnie na PHPMyAdmin. Aby dokładniej odpowiedzieć na to pytanie , wykonałem następujące czynności:
W pliku:
Zmieniłem to:
Do tego:
Mam nadzieję, że ktoś uratuje kłopoty ...
źródło
Miałem ten problem z linkiem do paginacji do przodu i do tyłu .... po prostu ustaw (int) przed zmienną $ Page + 1 i zadziałało ...
źródło
Napotkałem problem w phpmyadmin z PHP 7.3. Dzięki @coderama, zmieniłem biblioteki / DisplayResults.class.php wiersz 855 z
w
Naprawiony.
źródło
Witam, W moim przypadku używam (WordPress) i PHP7.4 otrzymuję ostrzeżenie o problemie z wartością liczbową. Więc zmieniłem stary kod w następujący sposób:
Z:
$val = $oldval + $val;
Do:
$val = ((int)$oldval + (int)$val);
Teraz ostrzeżenie zniknęło :)
źródło
Sprawdź, czy nie zwiększasz wartości za pomocą jakiejś zmiennej, czy jej wartość jest pustym ciągiem, takim jak „”.
Przykład:
źródło
Spróbuj tego.
i teraz możesz tego użyć w swojej pętli
To powinno rozwiązać twój problem.
źródło
Właśnie spojrzałem na tę stronę, ponieważ miałem ten problem. Dla mnie miałem liczby zmiennoprzecinkowe obliczone z tablicy, ale nawet po oznaczeniu zmiennych jako zmiennoprzecinkowych błąd nadal był podawany, oto prosta poprawka i przykładowy kod pod spodem, który powodował problem.
Przykład PHP
źródło
to jest kod, który zapętlił i utworzył nowe elementy div HTML. Kod działał dobrze, a elementy zostały utworzone, ale otrzymałem to samo ostrzeżenie w pliku error_log.
Po przeczytaniu innych przydatnych odpowiedzi doszedłem do wniosku, że sumuję ciąg i liczbę w błędnej linii. Więc zmieniłem kod w tej linii na
Teraz kod działa jak wcześniej, ale tym razem bez ostrzeżeń. Mam nadzieję, że ten przykład komuś się przyda.
źródło
Rozwiąż ten błąd na WordPress
Proste rozwiązanie tutaj!
wp-includes\SimplePie\Parse\Date.php
$second = round($match[6] + $match[7] / pow(10, strlen($match[7])));
$second = round((int)$match[6] + (int)$match[7] / pow(10, strlen($match[7])));
źródło
działa w 100% :)
źródło
Dzieje się tak zwykle, gdy ściągasz łańcuchy ze znakiem +. W PHP można dokonać konkatenacji za pomocą znaku kropki (.) Więc czasami przypadkowo umieszczam znak + między dwoma ciągami w PHP i pokazuje mi ten błąd, ponieważ możesz używać tylko liczb + logowania.
źródło
Upewnij się, że struktura kolumny to INT.
źródło
Jeśli w kodzie napotkano wartość nieliczbową, spróbuj poniżej. Poniższy kod jest konwertowany na float.
źródło
w PHP, jeśli użyjesz + do konkatenacji, otrzymasz ten błąd. W php + jest operatorem arytmetycznym . https://www.php.net/manual/en/language.operators.arithmetic.php
niewłaściwe użycie operatora +:
używać . do konkatenacji
źródło