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