2010-06-09 4 views
3

Je suis l'importation d'un fichier qui a quantité avec différents signes monnaiedivisé devise et le montant d'une chaîne

£12.10 
$26.13 
€12.50 

J'ai besoin d'importer et de convertir en monnaie unique. Je partage la chaîne comme suit

$parts = split(' ', preg_replace("/([0-9])/", ' ${1}', $amount, 1)); 

ne pouvaient pas faire le travail de preg_split avec PREG_SPLIT_DELIM_CAPTURE

$parts = preg_split("/\d/", $amount, 2, PREG_SPLIT_DELIM_CAPTURE); 

J'ai un tableau de signe de la monnaie au code monétaire

$currencySymbols = array('£'=>'GBP', '$'=>'USD','€'=>'EUR') 

Je dois 1. diviser la chaîne en signe de devise et la valeur - s'il y a une meilleure façon que ce que je fais 2. carte le signe de la monnaie à code de devise. Impossible de mapper avec $ currencySymbols [$ parts [0]]

Toute aide sera appréciée. (PHP 5.2.6) à l'aide charset = utf-8

Un grand merci

Répondre

5
+0

NumberFormatter n'est pas disponible en PHP 5.2.6 – NineBerry

+0

@NineBerry: Bon appel, je n'ai pas remarqué que la documentation était pour 5.3. Bah! – R0MANARMY

3

Vous ne devriez pas utiliser le fractionnement, mais modèle correspondant à déterminer le montant et la devise utilisée. Parce que dans certains endroits, le symbole monétaire apparaît avant le montant, dans d'autres, il apparaît derrière le montant. De plus, dans certains endroits, le symbole et la quantité sont séparés par des espaces.

La fonction suivante peut être utilisée:

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]; 
    } 

Voici comment il serait utilisé:

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"); 

Vous obtiendrez peut-être un problème avec le signe EURO si vous avez entrée UTF-8. Impossible de vérifier la solution ici maintenant. Peut-être que quelqu'un d'autre peut aider.

+0

désolé de ne pas répondre. J'ai pensé que je recevrais un email pour notifier les réponses. Donc, bien que vous ayez répondu presque immédiatement, j'ai appris à connaître seulement aujourd'hui. Je suis d'accord avec votre correspondance de modèle pour la gestion des paramètres régionaux. j'ai réalisé le principal problème est que les données lui-même, comme indiqué ci-dessous « Â £ 30.30 » â,¬62.03 La seule façon que je pouvais le faire fonctionner était de mettre le signe de la monnaie au code comme suivant tableau ('Â £ '=>' GBP ',' € '=>' EUR '); – webber