Вы не должны использовать расщепление, но сопоставление с образцом, чтобы определить сумму и используемую валюту. Поскольку в некоторых локалях символ валюты отображается перед суммой, в других - за суммой. Кроме того, в некоторых локалях символ и количество разделяются пробелами.
Может использоваться следующая функция:
function findAmountAndCurrency($s, &$amount, &$currency){
$re_amount="/[0-9\.]+/";
$re_curr="/[£\$€]+/";
preg_match($re_amount, $s, $matches);
$amount = floatval($matches[0]);
preg_match($re_curr, $s, $matches);
$currency = $matches[0];
}
Вот как это будет использоваться:
function handle($s){
$currencySymbols = array('£'=>'GBP', '$'=>'USD','€'=>'EUR');
findAmountAndCurrency($s, $amount, $currency);
echo("Amount: " . $amount . "<br/>");
echo("Currency: " . $currency . "<br/>");
echo("Identified Currency: " . $currencySymbols[$currency] . "<br/>");
}
handle("£12.10");
handle("3.212 €");
handle("$ 99.99");
Вы можете получить проблему со знаком EURO, если у вас есть вход UTF-8. Не могу проверить решение там прямо сейчас. Может быть, кто-то еще может помочь.