2012-03-05 6 views
5

Trong PHP, có vẻ như mọi đối tượng có thể được chuyển đổi thành một số nguyên, chỉ bằng cách gọi intval($object), nhưng đây không phải là những gì tôi muốn. Những gì tôi muốn là, để kiểm tra xem đối tượng có hợp lệ để được chuyển đổi thành một số nguyên cho những gì con người nghĩ.PHP kiểm tra xem đối tượng có thể được chuyển đổi thành số nguyên không?

Tức là, các đối tượng có giá trị sẽ là

  • 12
  • 12.0
  • "12"
  • "12.0"

Và không hợp lệ sẽ

  • MyFooInstance()
  • "some string"
  • "12.0.0"
  • "0 12.0"

, vv Trong python, tôi có thể chỉ đơn giản như sau:

try: 
    int(var) 
except (TypeError, ValueError): 
    return False 
return True 

Làm thế nào tôi có thể đạt được điều này trong PHP?

+1

[Hành vi chuyển đổi ** đối tượng ** thành số nguyên là không xác định.] (Http://php.net/manual/en/language.types.integer.php#language.types.integer.casting) – Gordon

+0

Go với Dogbert và tham khảo Gordon –

Trả lời

8

Sử dụng is_numeric.

<?php 
$tests = array(
    "42", 
    1337, 
    "1e4", 
    "not numeric", 
    array(), 
    9.1 
); 

foreach ($tests as $element) { 
    if (is_numeric($element)) { 
     echo "'{$element}' is numeric", PHP_EOL; 
    } else { 
     echo "'{$element}' is NOT numeric", PHP_EOL; 
    } 
} 
?> 


'42' is numeric 
'1337' is numeric 
'1e4' is numeric 
'not numeric' is NOT numeric 
'Array' is NOT numeric 
'9.1' is numeric 

(Từ trang)

+0

Cảm ơn bạn, phải bỏ lỡ điều đó! –

-1

thử

if((int)$variable) {... 
+1

Điều kiện trong 'if ((int) $ variable)' sẽ đánh giá thành 'false' khi' $ variable == 0'. –

+0

yep, quên chi tiết "nhỏ" :) –

3

Integer này (không chỉ số) kiểm tra:

function is_integerable($v){ 
    return is_numeric($v) && +$v === (int)(+$v); 
} 

Kết quả:

$str => is_integerable($str) 
'-1' => true 
'-1.00' => true 
'-1.11' => false 
'1e4' => true 
'1e40' => false 

Xem:

http://codepad.org/LoqfAgNl

+0

Cảm ơn bạn nhiều, nhưng 'is_numeric' cũng phù hợp. :) –

1

See PHP ctype_digit().

Hàm này đánh giá chuỗi để xem liệu tất cả ký tự có phải là số hay không. Do đó "1.1" sẽ không trả lại true"." không phải là số, nhưng "11" sẽ. Cũng lưu ý điều này chỉ hoạt động cho các chuỗi, vì vậy các số không có dấu ngoặc kép xung quanh cũng sẽ không hoạt động.