PHP: если число (с запятой), преобразуйте его в правильный формат чисел (с точкой)
у меня есть массив из смешанных значений:
$row = array('Unspecified risk','Yes','8','3','2','13','none','-1,49','-2,51','-1,46','-1,54'); -1,94 -1,55
Как вы можете видеть, он содержит текст и как отрицательные, так и положительные запятые.
мне нужно преобразовать числовые значения в правильный формат чисел и оставить текстовые значения как есть.
теперь я перебираю значения:
foreach ($row as $value) {
// If $value is numeric, convert it to the
// right number format for use with MySQL (decimal(10,2))
// If not, leave it be.
}
два связанных вопроса, которые я исследовал, но не могу найти подходящее решение.
- преобразование числа с запятой в качестве десятичного точка для float
- мне нужно регулярное выражение php для числового значения, включая " - "и","
может ли кто-нибудь привести практический пример?
3 ответов
вам не нужно использовать регулярные выражения.
использовать str_replace()
Как вам нужно, чтобы заменить ','
на '.'
, а затем использовать intval()
или floatval()
функции для получения числового значения. Вы также можете использовать strstr()
искать '.'
и решить, если с помощью intval()
или floatval()
пример:
$row = array('Unspecified risk', 'Yes', '8', '3', '2', '13', 'none', '-1,49', '-2,51', '-1,46', '-1,54');
function toNumber($target){
$switched = str_replace(',', '.', $target);
if(is_numeric($target)){
return intval($target);
}elseif(is_numeric($switched)){
return floatval($switched);
} else {
return $target;
}
}
$row = array_map('toNumber', $row);
var_dump($row);
мы используем str_replace() для замены точки для запятой, таким образом, это международный поплавок нотации, даже если он находится на строке, этот путь позже далее мы можем проверить, если это число is_numeric()
мы используем is_numeric, чтобы проверить, является ли значение целочисленным float или text и вернуть соответствующее значение с помощью intval()
или floatval()
(значение без примененной замены не будет возвращено в качестве допустимого числа, только после переключения, и . он вернет true как numeric).
мы используем:$row = array_map('toNumber', $row);
применить изменения в массиве.
прибыль xD
$row = array('Unspecified risk','Yes','8','3','2','13','none','-1,49','-2,51','-1,46','-1,54');
foreach($row as $key => $var) {
if(strstr($var, ",") && !is_numeric($var)) {
$var1 = str_replace(",","", $var);
if(is_numeric($var1)) {
$decimal = strstr($var, ',', TRUE);
$digits = str_replace($decimal, "", $var1);
$finalValue = $digits * pow(10,$decimal);
$row[$key] = $finalValue;
}
}
}
echo "<pre>"; print_r($row);
Примечание: это будет работать для php 5.3 или php 5.3+
использовать is_numeric
чтобы проверить и number_format
в формате
foreach ($row as &$value) {
$number = str_replace(',','.');
if(is_numeric($number))
$value = number_format($number, 2, '.', '');
}
unset($value);