在PHP中自动转换文本中的货币和指标

在PHP中自动转换文本中的货币和指标,php,type-conversion,Php,Type Conversion,我有一篇这样的文章 $text="The tower is 94.5m high, the view is up to 100km. The entrance is 8€"; preg_replace("/(.*)€/", $1*1.2, $text) 现在,我想为每个指标或货币提供工具提示,以获得如下结果: $text="The tower is <abbr title="310ft">94.5m</a> high,

我有一篇这样的文章

$text="The tower is 94.5m high, 
       the view is up to 100km. 
       The entrance is 8€";
preg_replace("/(.*)€/", $1*1.2, $text)
现在,我想为每个指标或货币提供工具提示,以获得如下结果:

$text="The tower is <abbr title="310ft">94.5m</a> high, 
       the view is up to <abbr title="62mi">100km</abbr>. 
       The entrance is <abbr title="10USD">8€</abbr>

这只是一个例子,我希望它能起作用,但事实并非如此

没有内置的PHP函数可以自动在不同的单元类型之间进行转换。您必须使用适当的转换率自己完成此操作。

您需要编写自己的函数来完成此操作。您可以在PHP中执行以下操作:

function meters_in_feet($meters)
{
    return $meters*3.28; // source: Google
}
$text="The tower is 94.5m high,  
       the view is up to 100km.  
       The entrance is 8€";

$result = preg_replace_callback("/(([0-9\.]+)(k?m))/", 'fn', $text);

var_dump($result);

function fn($matches) {
    switch($matches[3]) {
        case 'm' :
            // m to feet
            $conversion = $matches[2] * 3.28;
            $conversionUOM = 'ft';
            break;
        case 'km' :
            // km to miles
            $conversion = $matches[2] * 0.6;
            $conversionUOM = 'miles';
            break;
    }
    return '<abbr title="'.$conversion.$conversionUOM.'">'.$matches[0].'</abbr>';
}
然后你需要这样称呼它:

$height_meters = 94.5;
$height_feet = meters_in_feet($height_meters);
然后:

echo'.$height_-meters.'m high';

不过,这听起来像是一个家庭作业问题,所以要从输入文本字符串中提取度量值等,这可能是要求你做的,这是读者的练习。;)

类似于以下内容:

function meters_in_feet($meters)
{
    return $meters*3.28; // source: Google
}
$text="The tower is 94.5m high,  
       the view is up to 100km.  
       The entrance is 8€";

$result = preg_replace_callback("/(([0-9\.]+)(k?m))/", 'fn', $text);

var_dump($result);

function fn($matches) {
    switch($matches[3]) {
        case 'm' :
            // m to feet
            $conversion = $matches[2] * 3.28;
            $conversionUOM = 'ft';
            break;
        case 'km' :
            // km to miles
            $conversion = $matches[2] * 0.6;
            $conversionUOM = 'miles';
            break;
    }
    return '<abbr title="'.$conversion.$conversionUOM.'">'.$matches[0].'</abbr>';
}
$text=“塔高94.5m,
视野可达100公里。
入口为8欧元“;
$result=preg_replace_回调(“/([0-9\.]+)(k?m))/”,'fn',$text);
var_dump($结果);
函数fn($matches){
开关($matches[3]){
案例“m”:
//我站起来了
$conversion=$matches[2]*3.28;
$conversionoom='ft';
打破
案例“km”:
//公里到英里
$conversion=$matches[2]*0.6;
$conversionoom='miles';
打破
}
返回“”。$matches[0]”;
}

您需要调整regexp并为可能需要的任何其他UOM转换单位编写额外的案例,在实际转换中使用正确的数字(我只使用了快速和脏值),以及数字的任何格式。。。但是它应该给你一个基础。

大多数转换都是简单的乘法或除法,你可以在很多地方找到转换表。货币之间的兑换几乎每天都会发生变化,所以这就更难了。但是你试过什么,或者你只是希望有人能帮你做吗?没有马克,我完全不想让任何人帮我做,我只是希望得到一个建议,我如何使用preg_替换,或者这些转换是以什么方式完成的。谢谢。不要再问你的家庭作业问题了,淘气淘气。拜托,这不是家庭作业,我真的很难在输入文本中自动转换度量值以获得格式化结果。这不仅仅是一个1*2=2…如果你在寻找价格,你应该在谷歌上搜索。你可以搜索“1英尺米”。我们不应该专注于数字和速率,我正在搜索如何使用preg_替换或如何使用变量的答案。你是什么意思,使用preg_替换?你能给出一个具体的例子,说明你想把什么转换成什么吗?是的,我刚刚更新了这个问题,请看那里我期望它如何工作。Thxpreg_replace_callback()将是更合适的函数,识别值/单位并使用回调计算转换。确切地说,我尝试在输入文本中进行自动转换,这对我来说很难:)如果不难,就不值得这么做:)