Mailinglisten-Archive |
Michael Borchers wrote:
>> Michael Borchers schrieb:
>>> Das wäre dann 150500 (für die Datenbank müssen also , und . entfernt
>>> werden).
>> nee... alle "." müssen entfernt werden und aus "," wird "." ;) das wird
>> jetzt verwirrend.
>>
>> Also:
>> str_replace('.', '', $str);
>> str_replace(',', '.', $str);
>> $pattern = '/[0-9.]+/';
>> preg_match_all($pattern, $str, $matches, PREG_SET_ORDER);
>
> Hat wunderbar geklappt, thanks!
Es ist mir ein Rätsel, wie dieser Code klappen kann, da str_replace den
replacten String zurückgibt, aber du ihn nirgends speicherst ^^.
In meinen Benchmarks findest du die Idee aber verwirklicht in der 1,2
Sekunden Lösung...:
Das schnellste, was ich geschafft habe:
$num=(float)preg_replace('/^\D*/','',str_replace(Array('.',','),Array('','.'),$txt));
--> 0,8 Sekunden bei 100k Durchläufen
preg_match('/\d+(?:\\.\\d+)*(?:,\\d+)?/',$txt,$matches);
$num =(float)str_replace(Array('.',','),Array('','.'),$matches[0]);
--> 1 Sekunde bei 100K Durchläufen
preg_match_all('/[0-9.]+/',
str_replace(Array('.',','),Array('','.'),$txt),$matches,PREG_SET_ORDER);
$num =(float)$matches[0][0];
--> 1,2 Sekunden bei 100K Durchläufen
preg_match_all("|((\d{0,3})*(\.?\d{1,3})*(\,?\d{1,2})?)\s*(€)|i",$txt,$forderung);
$num =(float)$forderung[0][0];
--> >2 Sekunden bei 100K Durchläufen
$txt ='Summe 150.001,40 €';
Athlon 64, 3700+, 1GB RAM, Debian 3.1, php5.2.0
Yannik
php::bar PHP Wiki - Listenarchive