警告: 遇到非数值值

最近更新到 PHP 7.1,并开始出现以下错误

警告: 第29行中遇到的非数值

下面是第29行的样子

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

在本地主机上一切正常。

有什么办法解决这个问题吗?

576712 次浏览

在 PHP 7.1中,如果遇到非数值值,将发出警告。

以下是与你收到的警告通知有关的部分:

无效时引入了新的 E _ WARING 和 E _ NOTICE 错误 字符串是使用期望数字或其 当字符串开始时发出 E _ NOTICE 带有数值,但包含尾随的非数值字符,以及 如果字符串不包含数值,则发出 E _ WARING 值

我猜想 项目[数量]$产品〔价格〕都不包含数值,所以在尝试将它们相乘之前,请确保它们包含数值。也许在计算 $sub _ total 之前使用某种条件,如下所示:

<?php


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

试试这个。

$sub_total = 0;

在你的循环中你可以使用这个

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

应该能解决你的问题。

您可以解决这个问题,不需要任何新的逻辑,只需将事物转换成数字,这样就可以避免警告,并且与 PHP 7.0及以下版本中的行为相当:

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

(Daniel Schroeder 的答案是不等价的,因为如果遇到非数值,$sub _ total 将保持未设置。例如,如果打印出 $sub _ total,就会得到一个空字符串,这在发票中可能是错误的。- 通过强制转换确保 $sub _ total 是一个整数。)

不完全是你的问题,但同样的错误,人们搜索。

当我花太多时间在 JavaScript 上时,这种情况就发生在我身上。

回到 PHP,我用 +而不是 .连接了两个字符串,得到了这个错误。

检查是否没有使用某个变量来递增它的值是一个空字符串,如“。

例如:

$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

现在代码和以前一样工作,但是这次没有警告。希望这个例子对某些人有用。

在 WordPress 上解决这个错误

警告: 在 C: XAMPP htdocs aad-2 wp-include SimplePie Parse Date.php 中遇到一个非数值,位于第694行

简单的解决办法!

  1. 找到一个 wp-includes\SimplePie\Parse\Date.php文件
  2. 找一条694号线
  3. 你显示代码 $second = round($match[6] + $match[7] / pow(10, strlen($match[7])));
  4. 把这个3改成这条线 $second = round((int)$match[6] + (int)$match[7] / pow(10, strlen($match[7])));

在我的情况下,这是因为我使用 +作为在其他语言,但在 PHP 字符串串联运算符是 .

这是在 PHPMyAdmin 上特别发生在我身上的事情,所以为了更具体地回答 这个,我做了以下事情:

档案:

C:\ampps\phpMyAdmin\libraries\DisplayResults.class.php

我改了这个:

// Move to the next page or to the last one
$endpos = $_SESSION['tmpval']['pos']
+ $_SESSION['tmpval']['max_rows'];

这样说:

$endpos = 0;
if (!empty($_SESSION['tmpval']['pos']) && is_numeric($_SESSION['tmpval']['pos'])) {
$endpos += $_SESSION['tmpval']['pos'];
}
if (!empty($_SESSION['tmpval']['max_rows']) && is_numeric($_SESSION['tmpval']['max_rows'])) {
$endpos += $_SESSION['tmpval']['max_rows'];
}

希望救人的人有些麻烦..。

$sub_total_price = 0;


foreach($booking_list as $key=>$value) {
$sub_total_price += ($price * $quantity);
}


echo $sub_total_price;

100% 有效

我有这个问题与我的分页向前和向后链接... 。只需在变量 $Page + 1前面设置(int)就可以了..。

<?php
$Page = (isset($_GET['Page']) ? $_GET['Page'] : '');
if ((int)$Page+1<=$PostPagination) {
?>
<li> <a href="Index.php?Page=<?php echo $Page+1; ?>"> &raquo;</a></li>
<?php }
?>

这种情况通常发生在使用 + 符号连接字符串时。在 PHP 中,可以使用点号(.)进行连接因此,有时候我不小心在 PHP 中的两个字符串之间放入了 + sign,它向我显示了这个错误,因为您只能使用数字中的 + sign。

我在 PHP 7.3的 phpmyadmin 中遇到了这个问题

// Move to the next page or to the last one
$endpos = $_SESSION['tmpval']['pos']
+ $_SESSION['tmpval']['max_rows'];

进入

// Move to the next page or to the last one
$endpos = (int)$_SESSION['tmpval']['pos']
+ (int)$_SESSION['tmpval']['max_rows'];

修好了。

确保列结构为 INT。

如果在代码中遇到非数值,请尝试以下1。 下面的代码被转换为 float。

$PlannedAmount = ''; // empty string ''


if(!is_numeric($PlannedAmount)) {
$PlannedAmount = floatval($PlannedAmount);
}


echo $PlannedAmount; //output = 0

在 PHP 中,如果使用 +进行连接,那么最终将得到这个错误。在 php 中,+是一个 算术操作符。 Https://www.php.net/manual/en/language.operators.arithmetic.php

错误使用 + 操作符:

            "<label for='content'>Content:</label>"+
"<textarea class='form-control col-xs-12' rows='7'cols='100' id='content' name='content'>"+$initcontent+"</textarea>'"+
"</div>";

使用 .连接

$output = "<div class='from-group'>".
"<label for='content'>Content:</label>".
"<textarea class='form-control col-xs-12' rows='7'cols='100' id='content' name='content'>".$initcontent."</textarea>'".
"</div>";

你好, 在我使用(WordPress)和 PHP7.4的情况下,我得到一个关于数值问题的警告。所以我修改了旧的代码如下:

来自:

$val = $oldval + $val;

致:

$val = ((int)$oldval + (int)$val);

现在警告消失了:)

您需要确认您正在处理的是一个数字:

 if (is_numeric($item['quantity'])) {
if (is_numeric($product['price'])) {
echo $item['quantity'] * $product['price'];
} else {
echo $item['quantity']. $product['price'];
}
} else {
echo $item['quantity']. $product['price'];
}
$sub_total += ($item['quantity'] * $product['price']);

取而代之的是:

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

PHP 7.1-7.4

当表达式中有一个非数字字符串(可能是 +-*/) ,其中 PHP 希望看到另一个标量(int、 float 或 bool)时,会发生此警告。这种情况有两种可能发生:

  • 您并不打算使用需要标量的操作。例如,当您指的是 .(连接)时,+(加法)。
  • 您期望的是一个数字,但是您使用的值甚至不接近于一个数字。找出你的非数字是什么,并据此处理。
    • 例如,如果您有 echo 3 + $variable,而您的 $variable是字符串 "n/a",那么您可能会决定改为回显“不适用”。或者,您可能决定将所有非数值都视为0并强制转换为。

修正这些警告! 在 PHP8中,这将成为一个致命错误: “ UncatedTypeError: Unsupport 操作数类型”。

PHP8

在 PHP 7.1-7.4中用于产生警告“遇到非格式良好的数值”的代码现在给出了这个警告。当您有一个“尾随字符串”时会发生这种情况,这是一个以数字开头但后面跟着非数字的字符串。(它仍然会做数学,但你应该解决这一点!将来它可能会升级为错误。)例如:

echo 3 + "30 meters";

产出:

警告 : 在 < b > X 行的 [...][...]中遇到非数值值
33

解决方案:

echo 3 + (float) "30 meters";

在使用 Number _ format ()方法添加两个格式化变量之后,我收到了这个错误。原因是这种方法通常用 ,格式化数字,除非您将可选的 分离器参数指定为 null。例如,假设我有以下代码:

$subtotal = 6556.7;
$vat = number_format(0.175 * $subtotal, 2);            // 1,147.42
$transactionfee = number_format(0.02 * $subtotal, 2);  // 131.13
$total = $subtotal + $vat + $transactionfee;           // 6556.7 + 1,147.42 + 131.13 = ERROR

这将触发以下错误,因为其中一个变量包含一个对于 float 类型无效的 ,:

警告 : 遇到非数值值..。

number_format()方法具有以下方法签名:

number_format(number,decimals,decimalpoint,separator).

通过将分隔符参数指定为 '',这个错误可以修复如下:

$subtotal = 6556.7;
$vat = number_format(0.175 * $subtotal, 2, '.', '');           //1147.42
$transactionfee = number_format(0.02 * $subtotal, 2, '.', ''); //131.13
$total = $subtotal + $vat + $transactionfee;   // // 6556.7 + 1147.42 + 131.13 = 7835.25

也许已经很晚了,但对于那些还像我一样胡思乱想的人来说。在我的案例中,它是用 PHP 5.6开发的遗留项目,但是当我需要修改它时,我正在运行 PHP 7.1。我都懒得换了。(不得不付钱)所以问题是 PHP 7.1比 PHP 5.6更严格

在 PHP 5.6中允许以下内容。

$totalPrice = ' '
$someFoo = $totalPrice + 100
// This is totally fine. And PHP will not yell about it.

而在 PHP 7.1中,它会抛出一个错误

$totalPrice = ' '
$someFoo = $totalPrice + 100
// Error : A non-numeric value encountered.

所以把这条线改成 $totalPrice = 0之后,一切都正常了。

希望有人会觉得有用。

谢谢大家。我有:

<?php echo $data['style_headerheight']-3; ?>

导致了错误:

PHP 警告: 第78行框架/inc/customcss.PHP 中遇到的非数值

为了解决这个问题,我把它替换为:

<?php echo ((int)$data['style_headerheight']-(int)3); ?>

对于其他人来说,这里的答案可能无法解决问题。

我的问题不涉及整数或连接。

我的问题是一个简单的输入错误(代码中错误的字符串)。

$conn = new PDO($details, $username, $password); -

不知怎么的,我不小心在代码中输入了一个减号(-)。移除这个解决了我的问题。我的猜测是 PHP 出错了,因为它看到了负号,它希望在那里执行一些算术操作,但是没有参数。

对我来说,这是因为操作符优先级的缘故。我写了 $something & BITMASK && $another_value&&的结合比 &的结合“更紧密”。总是确保使用括号来避免这样的问题!