【问题标题】:A non-numeric value encountered in PHP 7.3.8PHP 7.3.8 中遇到的非数字值
【发布时间】:2019-09-18 12:15:27
【问题描述】:

我的以下代码在具有 PHP 7.0 的生产服务器上按预期返回 0,但在我的 localhost - PHP 7.3.8 上返回“遇到的非数字值”。

<?php
ini_set("log_errors"     , "1");
ini_set("error_log"      , "errors.log");
ini_set("display_errors" , "1");

$f['Customers2'] = "";
$f['MonetarySpend'] = "";
echo str_replace(',', '', $f['MonetarySpend']) *  str_replace(',', '', $f['Customers2']);
?>

如何在 PHP 7.3.8 中将 "" 视为 0?

【问题讨论】:

  • “如何在 PHP 7.3.8 中将 "" 视为 0?” - PHP 已经做到了。如果您不喜欢这些警告,请禁用这些警告,或者确保您的值实际上是数字,然后再尝试对它们进行数学运算。
  • 这些是包含逗号的字符串值,用户以我正在存储的形式传递。
  • 那么先把它们转换成数字?

标签: php php-7.3


【解决方案1】:

这个警告是implemented in PHP 7.1

您可以使用显式转换而不是隐式转换。

echo intval(str_replace(',', '', $f['MonetarySpend'])) * intval(str_replace(',', '', $f['Customers2']));

如果钱可以有小数,你可以用floatval代替

echo floatval(str_replace(',', '', $f['MonetarySpend'])) * floatval(str_replace(',', '', $f['Customers2']));

如果这让您感到困扰并且您只想获得一次警告消息,您可以将@用作error control operator

echo @(str_replace(',', '', $f['MonetarySpend']) *  str_replace(',', '', $f['Customers2'])); // no warning

一些使用 php 7.3.5 的例子:

echo "Operations with ints : " . intval(str_replace(',', '', "12,345")) * intval(str_replace(',', '', "42")) . PHP_EOL;
echo "Operations with empty strings : " . intval(str_replace(',', '', "")) * intval(str_replace(',', '', "")) . PHP_EOL;

echo "Operations with floats : " . floatval(str_replace(',', '', "12,345.67")) * floatval(str_replace(',', '', "42")) . PHP_EOL;
echo "Operations with empty strings : " . floatval(str_replace(',', '', "")) * floatval(str_replace(',', '', "")) . PHP_EOL;

echo "Error control : " . @("" * "") . PHP_EOL;

echo "Now, no error control to check if I have warning enabled" . PHP_EOL;
echo "NO error control : " . "" * "" . PHP_EOL;

这个输出:

Operations with ints : 518490
Operations with empty strings : 0
Operations with floats : 518518.14
Operations with empty strings : 0
Error control : 0
Now, no error control to check if I have warning enabled
<br />
<b>Warning</b>:  A non-numeric value encountered in <b>[...][...]</b> on line 
<b>12</b><br />
<br />
<b>Warning</b>:  A non-numeric value encountered in <b>[...][...]</b> on line 
<b>12</b><br />
NO error control : 0

【讨论】:

  • 永远不应使用错误抑制运算符。大多数时候都有更好的解决方案。
  • @Dharman 我同意你的观点,我想展示不同的可能性
猜你喜欢
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-02
相关资源
最近更新 更多