PHP-由于无法移动空格,因此无法bcadd()字符串

时间:2018-06-28 14:16:58

标签: php

TL; DR

来自数组的字符串,其格式如下:436,97 €不能被修剪成类似这样的436.97,这就是为什么无法使用{{1 }}。

全文

我正在尝试添加两个字符串,一个是我声明自己的字符串,并用bcadd()初始化,另一个是来自数组并具有以下格式的字符串:"0.00"我尝试了几种方法,但是在436,97 €的输出为0.00。我在那里做错了什么? 我试图简化代码以将其发布到这里,并且可以正常运行:

bcadd()

我不知道为什么我的程序中没有实际的代码,但是我也会在注释中加上它:

首先,我初始化变量,然后调用函数来增加/减少,具体取决于来自数组的值。 (整个构造都在循环内)。
我在这里删除了许多if .. else块,以使其更易于阅读。

<?php
$totalToAdd = "0.00";
$amount = "436,97 €";
$amount = trim($amount, "€");
$amount = str_replace(",",".",$amount);
$amount = trim($amount," ");
$totalToAdd = bcadd($totalToAdd, $amount,2);
echo $totalToAdd;
?>

这是被调用的函数:

$totalToAdd = "0.00";
$totalToAdd = $this->_updateSubtotal($totalToAdd, $totalData['label'],$totalData['amount']);

函数的返回值始终为protected function _updateSubtotal($total, $label, $amount){ $amount = trim($amount, "€"); $amount = str_replace(",",".",$amount); $amount = trim($amount," "); $total = bcadd($total, $amount,2); return $total; } 我尝试使用以下两个命令来一步一步修剪字符串:     $total = 0     trim($amount, " €");
但是在两种情况下,trim($amount, "\x20€");的值都是:
    $amount

我也尝试过substr():
     $amount = "436,97 "

但这导致:
     substr($amount,0,-2);

所以我尝试了2个步骤进行修整,但这是发生了以下情况:

$amount = "436,97 �"


也许这就是为什么bcadd()不起作用的原因?
如何摆脱空白?

编辑:

我更改了代码,不直接使用数组值$amount = trim($amount, "€"); -> $amount = "436,97 " $amount = str_replace(",",".",$amount); -> $amount = "436.97 " $amount = trim($amount," "); -> $amount = "436.97 " 来调用函数,而是使用了附加变量:$ amount,因此函数调用如下所示:
     $totalData['amount'] 并将金额从数组写入$totalToAdd = $this->_updateOwnSubtotal($totalToAdd, $totalData['label'],$amount);之前。我尝试了这些方法,但都无效:
    $amount$amount = $totalData['amount'];

然后,我通过将字符串直接写入变量$amount = "" . $totalData['amount'];来很好地工作,从而在没有数组的情况下进行了尝试。

所以我的数组中的值一定有问题。它们应该是字符串,当我尝试is_string()或gettype()时就是它们。

什么可能导致此问题?

1 个答案:

答案 0 :(得分:0)

我能够使用mb_substr解决此问题:
$amount = mb_substr($amount,0,-2, 'UTF-8');

Input: "436,97 €" -> Output: "436.97"

并且bcadd()最终可以在没有其他空格的情况下工作。