【发布时间】:2018-11-18 04:45:36
【问题描述】:
我在通过 API 视觉获得的收据字符串中查找用户支付的总金额时遇到问题。
例如:
$testo2 = "Del burger Sr Via Carlo del Prete 106/d 50127 FIRENZE C.F. E P.IVA 08380120482 BRUNCH MAMMAMIA ONION RINGS SPICCHI PATATE ACQUA 0.5L TAVOLO 88 EURO 6,50 6,50 4,00 3,00 1,00 TOTALE EURO CONTANTI 21,00 21,00 NR.0057 23/05/18 20:21 MF U1 72005985";
为了找到总数,我试图在一个中搜索点或逗号(一些收据有点和另一个逗号),然后检查点或逗号后面是否有两个数字,然后搜索数字在逗号之前,直到找到找到的字符是一个数字。然后我将这些值放入一个数组中,并以这样的方式反转它以组成一个完整的价格字符串(包括逗号后面的值)。然后将价格输入到一个数组中。
for($i = 1; $i <= $lenghtTesto2 - 1; $i++)
{
if($testo2[$i] == "." || $testo2[$i] == ",")
{
if($testo2[$i + 1] == "0" || $testo2[$i + 1] == "1" || $testo2[$i + 1] == "2" || $testo2[$i + 1] == "3" || $testo2[$i + 1] == "4" || $testo2[$i + 1] == "5" || $testo2[$i + 1] == "6" || $testo2[$i + 1] == "7" || $testo2[$i + 1] == "8" || $testo2[$i + 1] == "9")
{
if($testo2[$i + 2] == "0" || $testo2[$i + 2] == "1" || $testo2[$i + 2] == "2" || $testo2[$i + 2] == "3" || $testo2[$i + 2] == "4" || $testo2[$i + 2] == "5" || $testo2[$i + 2] == "6" || $testo2[$i + 2] == "7" || $testo2[$i + 2] == "8" || $testo2[$i + 2] == "9")
{
$check = true;
while($check)
{
if($testo2[$i - $j] == "0" || $testo2[$i - $j] == "1" || $testo2[$i - $j] == "2" || $testo2[$i - $j] == "3" || $testo2[$i - $j] == "4" || $testo2[$i - $j] == "5" || $testo2[$i - $j] == "6" || $testo2[$i - $j] == "7" || $testo2[$i - $j] == "8" || $testo2[$i - $j] == "9")
{
array_push($arrPrezzi_invertiti, $testo2[$i - $j]);
$j++;
}
else
{
$prezzo = "";
$totaleFinale = "";
$dopoPunto1 = $testo2[$i + 1];
$dopoPunto2 = $testo2[$i + 2];
$j = 1;
$lenght_arrPrezzi_invertiti = count($arrPrezzi_invertiti);
for($k = $lenght_arrPrezzi_invertiti - 1; $k >= 0; $k--)
{
$totaleFinale .= $arrPrezzi_invertiti[$k];
}
$prezzo = $totaleFinale . "." . $dopoPunto1 . $dopoPunto2;
array_push($array, $prezzo);
$check = false;
}
}
}
}
}
}
钱是 6,50 6,50 4,00 3,00 1,00 21,00 21,00
提前致谢。
【问题讨论】:
-
首先,有什么问题?你没有指定。其次,您是否尝试过使用正则表达式?它更干净。并请具体说明字符串中列出的钱在哪里。并非所有人都懂意大利语
-
您是在尝试创建通用解决方案还是字符串始终采用这种精确格式?
-
不就是
TOTALE这个词后面的第一个数字吗(假设CONTANTE表示现金,也可以是一个不同的词(或多个词),所以你可能想要灵活处理那?所以我认为你想隔离从 TOTALE 之后的第一个数字到之后的第一个空格的所有内容。 -
在第二张收据上,是所有的数据还是你把它剪掉了,请用你的真实字符串而不是图片发布代码,我需要使用你的真实字符串进行测试。
-
第二个有不同的格式,没有你说会一直存在的这个文本。
标签: php arrays for-loop while-loop ocr