2014-09-22 2 views
6

Как превратить строковое представление целых чисел с запятой в целое число в PHP? (Есть общий способ сделать это для других разделителей тоже?)Получение значения int из числа, разделенного запятой php

e.g. 1,000 -> 1000 

Edit (Спасибо @ghost) В идеале, десятичные должны быть обработаны, но я мог бы принять решение, которое обрезает в десятичной точки.

+0

его слишком широкий, как насчет других тестовых случаев? '1,000.456' – Ghost

+0

обновлен. Спасибо – paullb

ответ

8

Если то просто, как он получает, вы можете использовать filter_var():

$number = '1,000'; 
$number = (int) filter_var($number, FILTER_SANITIZE_NUMBER_INT); 
var_dump($number); 

Или

$number = '1,000.5669'; 
$number = (float) str_replace(',', '', $number); 
var_dump($number); 
1

При использовании PHP> = 5.3, вы можете использовать numfmt_create(), как:

$fmt = numfmt_create('nl_NL', NumberFormatter::TYPE_INT32); 
$num = "1,000"; 
echo numfmt_parse($fmt, $num); //gives 1000 

Примечание :: nl_NL является локаль используется в количестве форматирования, и оно должно быть одинаковым при использовании для numfmt_create

+0

Это будет echo '1', а не' 1000' –

+0

@VikasArora это полностью зависит от языкового стандарта, который используется для добавления разделителей, обновил мой ответ с помощью nl_NL как locale –

3

Вы можете зачищать специфический характер с использованием str_replace и брось как целое, используя intval. Фильтр регулярных выражений также может использоваться для определения правильности форматирования входной строки. Вот как выглядит этот код:

<?php 

function remove_delimiters_simple($string, $delimiter = ',') { 
    // Removes all instances of the specified delimiter and cast as an integer 
    // Comma (,) is the default delimiter 
    return (int) str_replace($delimiter, '', $string); 
} 

function remove_delimiters_advanced($string, $delimiter = ',') { 
    // Use preg_quote in case our delimiter is '/' for some reason 
    // The regular expression should match validly formatted numbers using a delimiter 
    // every 3 characters 
    $valid_format_expression = sprintf(
     '/^\d{1,3}(%s\d{3})*$/', 
     preg_quote($delimiter, '/') 
    ); 

    // If not a validly formatted number, return null 
    if (! preg_match($valid_format_expression, $string)) { 
     return null; 
    } 

    // Otherwise, return the simple value 
    return remove_delimiters_simple($string, $delimiter); 
} 
Смежные вопросы