phpbar.de logo

Mailinglisten-Archive

[php] (Komma-)Zahl aus String

[php] (Komma-)Zahl aus String

Yannik Hampe yannik at cipher-code.de
Die Apr 24 15:39:48 CEST 2007



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