2016-11-04 53 views
-2

我在一個文件中的字符串看起來像這樣(昏迷或點用作小數點)結尾的字符串:提取多個十進制數和從字符串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] => '%' 
} 
+3

你想要的輸出是錯誤的。如果數量和百分比相等怎麼辦?請重新考慮一下。 –

回答

0
<?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 –

相關問題