提取多个十进制数和从字符串PHP
问题描述:
我在一个文件中的字符串看起来像这样(昏迷或点用作小数点)结尾的字符串:提取多个十进制数和从字符串PHP
$str = "12,50 EUR, 3,5%";
$str = "12,50EUR, 3,5%";
$str = "12,50EUR,3,5%";
$str = "2,5%";
$str = "8,75 EUR";
$str = "12.50 EUR, 3,5%";
$str = "12,50 EUR, 3.5%";
$str = "2.5%"
$str = "8.75 EUR";
$str = "8.75EUR";
$str = "8,75EUR";
我想能够从每个字符串中提取数字值,后面跟随数字后面的数字,剥离出任何空格或字符之间的数字。
作为一个例子为
$str = "12,50 EUR, 3,5%";
所得关联数组谨这样的(所得到的值始终使用点作为十进制分隔不论它是什么前):
array = {
[12.75] => 'EUR',
[3.5] => '%'
}
答
<?php
$str []= "12,50 EUR, 3,5%";
$str []= "1EUR,2%";
$str []= "12,50EUR, 3,5%";
$str []= "12,50EUR,3,5%";
$str []= "2,5%";
$str []= "8,75 EUR";
$str []= "12.50 EUR, 3,5%";
$str []= "12,50 EUR, 3.5%";
$str []= "2.5%";
$str []= "8.75 EUR";
$str []= "8.75EUR";
$str []= "8,75EUR";
foreach ($str as $string) {
preg_match_all("/([0-9]+,*\.*[0-9]*\s*[A-Za-z%]*)/", $string, $results);
$ret= array();
if (isset($results[0][0])) {
preg_match("/([0-9]+,*\.*[0-9]*)(\s*[A-Za-z%]*)/", $results[0][0], $res);
$num = str_replace(",", ".", $res[1]);
$sym = trim($res[2]);
$ret[$num] = $sym;
}
if (isset($results[0][1])) {
preg_match("/([0-9]+,*\.*[0-9]*)(\s*[A-Za-z%]*)/", $results[0][1], $res);
$num = str_replace(",", ".", $res[1]);
$sym = trim($res[2]);
$ret[$num] = $sym;
}
var_dump($ret);
}
+0
我认为这是一个很好的起点,但它可能并不总是欧元或百分比。这可以改善吗? –
+0
我会添加到上面,它也需要能够处理整数值作为字符串的一部分,如2%5EUR –
你想要的输出是错误的。如果数量和百分比相等怎么办?请重新考虑一下。 –