2014-09-22 16 views
6

Làm cách nào để chuyển biểu diễn chuỗi được phân tách bằng dấu phẩy của một số nguyên thành một giá trị số nguyên trong PHP? (Là có một cách tổng quát để làm điều đó cho tách khác quá?)nhận giá trị int từ số được phân cách bằng dấu phẩy php

e.g. 1,000 -> 1000 

Chỉnh sửa (Cảm ơn @ghost) Lý tưởng nhất, số thập phân cần được xử lý, nhưng tôi có thể chấp nhận một giải pháp mà truncates tại một điểm thập phân.

+0

quá rộng, về các trường hợp thử nghiệm khác? Đã cập nhật '1.000.456' – Ghost

+0

. Cảm ơn – paullb

Trả lời

8

Nếu thats đơn giản vì nó giúp bạn có thể sử dụng filter_var():

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

Hoặc

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

Nếu sử dụng PHP> = 5.3, bạn có thể sử dụng numfmt_create(), như:

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

Lưu ý :: nl_NL là locale bạn sử dụng trong định dạng số, và nó nên được như vậy khi sử dụng cho numfmt_create

+0

Điều này sẽ lặp lại '1' và không phải' 1000' –

+0

@VikasArora nó hoàn toàn phụ thuộc vào miền địa phương được sử dụng để thêm dấu tách, cập nhật câu trả lời của tôi với nl_NL làm ngôn ngữ –

3

Bạn có thể tước một nhân vật cụ thể sử dụng str_replace, và chọn vào vai một số nguyên sử dụng intval. Một bộ lọc biểu thức chính quy cũng có thể được sử dụng để xác định xem chuỗi đầu vào có được định dạng đúng hay không. Dưới đây là mã trông như thế nào:

<?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); 
} 
Các vấn đề liên quan