2014-09-22 14 views
6

Come si trasforma una rappresentazione di stringa separata da mille virgola di un intero in un valore intero in PHP? (C'è un modo generale di farlo per altri separatori troppo?)ricavare il valore int da un numero separato da virgola php

e.g. 1,000 -> 1000 

Edit (Grazie @ghost) Idealmente, decimali dovrebbero essere trattati, ma ho potuto accettare una soluzione che tronca a un punto decimale.

+0

è troppo ampio, che ne dici di altri casi di test? '1,000.456' – Ghost

+0

aggiornato. Grazie – paullb

risposta

8

Se questo è semplice come si arriva si potrebbe usare filter_var():

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

O

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

Se si usa PHP> = 5.3, è possibile utilizzare numfmt_create(), come:

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

Nota :: nl_NL è il locale utilizzato nel numero di formattazione, e dovrebbe essere lo stesso quando si utilizza per numfmt_create

+0

Questo echo '1' e non' 1000' –

+0

@VikasArora dipende completamente dalle impostazioni locali utilizzate per aggiungere separatori, ha aggiornato la mia risposta con nl_NL come locale –

3

È possibile togliere un carattere specifico utilizzando str_replace, e lanciato come un intero utilizzando intval. È anche possibile utilizzare un filtro di espressioni regolari per determinare se la stringa di input è formattata correttamente. Ecco come potrebbe essere il codice:

<?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); 
} 
Problemi correlati