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.