0

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

检索到的文本可能包含价格。所以例如

交付文本

超过 200 欧元的订单免费送货。200 欧元以下的订单收取 10 欧元的费用。重货可能会收取额外费用。

我将如何替换每次出现的价格,所以在上述情况下我会改变

€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 中的元素(不带欧元符号的价格)更改找到的匹配项。我该怎么做?

4

3 回答 3

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] => 
        )
)

您将能够决定要应用什么逻辑(了解价值和货币符号)

于 2013-03-20T11:16:30.470 回答
0

PHP 文档是一个很好的起点。您必须使用字符串搜索功能。试着弄清楚自己,你有整个 PHP 文档可以查看。只需在 google 上搜索 string search php,你就会找到大量信息。

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

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

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

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

祝你好运 !

于 2013-03-20T11:18:29.897 回答
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;

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

更新:

我只是想转换你有,你可能需要先删除然后添加货币符号;但你应该有一个起点 - 只需使用返回函数

于 2013-03-20T12:17:30.047 回答