Kommen Zahlen aus nicht selbst gepflegten Quellen, können sie in verschiedensten Formaten ankommen. Um sie weiter zu verarbeiten, müssen sie vereinheitlicht werden. Diese Funktion macht das.
function getNumbers($value) { $value = str_replace(' ', '', $value); $found = array(); preg_match('#([^0-9])[0-9]+$#', $value, $found); if (empty($found[1]) === false) { if (substr_count($value, $found[1]) > 1) { return ((float)str_replace($found[1], '', $value)); } switch ($found[1]) { case ',': $value = str_replace(array('.', ','), array('', '.'), $value); break; case '.': $value = str_replace(',', '', $value); break; } } return ((float)$value); }
Hier noch ein Codeschnippsel um die Funkion zu testen:
$numbers = array( '-10', '- 10', '.5', '.', '', ' ', ' 5.', '5. ', 'abc', '1abc', 'abc1', '1000', '1500.12', '1500,12', '1500 12', '150 012', '1 5 0 0 1 2', '1 500,12', '1 500.12', '1500, 12', '1500. 12', '1.500,12', '1,500.12', '-1,500.12', '-1,500,000', '-1,500', '1.500', '-1,50', '-1.500,000', '1500,000,000', '1500.000.000' ); foreach ($numbers as $val) { echo $val . ' - ' . getNumbers($val) . '<br />'; }
Um Zahlen aus Strings zu extrahieren findet man hier die passende Funktion.