在文本中查找和替换价格的算法

时间:2013-03-20 10:51:48

标签: php algorithm magento replace

我有一段任意文本,通过CMS内的magento提供,

检索到的文本可能包含其中的价格。例如,

投放文字

  

超过200欧元的订单免费送达。订单满10欧元   低于200欧元。重型商品可能会收取额外费用。

我如何更换每个价格的出现,所以在上面的情况下我会改变

€200
€10
€200

我想根据当前使用的货币替换这些价格。

$fromCur = 'EUR'; // currency code to convert from
$toCur = 'USD'; // currency code to convert to
$toCurrencyPrice = Mage::helper('directory')->currencyConvert($fromCurrencyPrice, $fromCur, $toCur);

这是我将如何转换价格,唯一的是,我不知道我将如何在文本中找到价格

这是我到目前为止所尝试的内容

//the text to search
$text = 'Orders over €200 are delivered Free Of Charge. €10 charge for orders under €200. There may be additional charges for heavy goods.';

$matches = array();
//find a price with a euro symbol
preg_match_all("/€[0-9]+/", $text, $matches);


$ints = array();
$counter = 0;
//remove the euro symbol
foreach ($matches[0] as $match) {
   //echo  substr( $match,6) . '<br/>';
   $ints[$counter] = substr( $match,6);
   $counter++;

}
//now i know i have to convert it to my price, but my issue is, how do i now replace new values, with the old values inside the $ text varaible

假设我想改变找到的匹配,使用$ ints中的元素(没有欧元符号的价格)。我该怎么做?

3 个答案:

答案 0 :(得分:0)

不是完整的解决方案,但要开始,您可以使用以下方法提取价格和单位:

$text = "I bought a shoes 33 $, a tee shirt 44 $ and a short 55 €.";

$match = array();
preg_match_all("/([0-9]+)[ ]*(€)|([0-9]+)[ ]*([$])/", $text, $match);
print_r($match);

它会给你:

Array
(
    [0] => Array
        (
            [0] => 33 $
            [1] => 44 $
            [2] => 55 €
        )

    [1] => Array
        (
            [0] => 
            [1] => 
            [2] => 55
        )

    [2] => Array
        (
            [0] => 
            [1] => 
            [2] => €
        )

    [3] => Array
        (
            [0] => 33
            [1] => 44
            [2] => 
        )

    [4] => Array
        (
            [0] => $
            [1] => $
            [2] => 
        )
)

您将能够决定要应用的逻辑(知道值和货币符号)

答案 1 :(得分:0)

PHP文档是一个很好的起点。您必须使用字符串搜索功能。尝试搞清楚自己,你需要查看完整的PHP文档。只需在谷歌搜索字符串搜索php,你就会发现大量的信息。

以下是一些可能对您有所帮助的功能:

http://php.net/manual/en/function.strpos.php

http://php.net/manual/en/function.preg-match.php

我认为pregmatch会满足您的需求。了解该功能并在您的范围内使用它。

祝你好运!

答案 2 :(得分:0)

假设您总是将€作为收入货币,请尝试下一个代码:

$string = 'Orders over €200 are delivered Free Of Charge. €10 charge for orders under €200. There may be additional charges for heavy goods.';
$pattern = "#€[0-9]{1,}#";
$newStr = preg_replace_callback($pattern, create_function(
        '$matches',
        'return Mage::helper(\'directory\')->currencyConvert($matches[0], \'EUR\', \'USD\');'
    ), $string);
echo $newStr;

我没有测试过,但它应该可以工作;

<强>更新

我只想到你有转换,你可能需要删除然后再添加货币符号;但你应该有一个起点 - 只需玩回归功能