Используйте preg_match ();
Вам нужно будет добавить возможные комбинации слов в [\sEURO|\sCONTANTI|\sECT.]
В любом случае это даст вам представление.Возьмите его, пока не получите, как хотите.
$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";
$testo2 = preg_replace('/\s{1,}/', ' ', $testo2);
preg_match('/[\s\S]{0,}TOTALE\s[\sEURO|\sCONTANTI]{0,}\s(.*?)\s/', $testo2, $match);
echo $match[1]; //<--- Outputs "21,00"
Второе решение
Я уверен, что вы можете сойти с умаи заставить что-то работать, но нам нужно было бы использовать несколько примеров.Лучшей идеей может быть предположение, что общая сумма всегда будет самой высокой суммой в квитанции.Если это так, мы можем сделать что-то вроде этого:
function getReceiptTotal($receipt){
preg_match_all('/\d+[\.,]\d+\s/', $receipt, $match);
$comma = preg_match('/,/', $match[0][0]) ? TRUE : FALSE;
for($i = 0; $i < count($match[0]); $i++){
$match[0][$i] = trim($match[0][$i]);
if($comma){
$temp[] = preg_replace('/,/', '.', $match[0][$i]);
}
}
sort($temp);
$total = end($temp);
if($comma){
return preg_replace('/\./', ',', $total);
} else {
return $total;
}
}
echo getReceiptTotal($testo2); //Will output "21,00".
Это должно работать для всех типов чеков.