2008-10-25 15 views

Respuesta

79

is_int() devuelve verdadero si el argumento es un tipo entero, ctype_digit() toma un argumento de cadena y devuelve verdadero si todos los caracteres en la cadena son dígitos.

Ejemplo:

┌──────────┬───────────┬────────────────┐ 
│   │ is_int: │ ctype_digit: │ 
├──────────┼───────────┼────────────────┤ 
│ 123  │ true  │ false   │ 
├──────────┼───────────┼────────────────┤ 
│ 12.3  │ false │ false   │ 
├──────────┼───────────┼────────────────┤ 
│ "123" │ false │ true   │ 
├──────────┼───────────┼────────────────┤ 
│ "12.3" │ false │ false   │ 
├──────────┼───────────┼────────────────┤ 
│ "-1"  │ false │ false   │ 
├──────────┼───────────┼────────────────┤ 
│ -1  │ true  │ false   │ 
└──────────┴───────────┴────────────────┘ 
3

La última cosa que debe preocuparse es la rapidez con uno de ellos es. No hay manera de que revisar una cadena por ser un número entero sea un cuello de botella en tu código.

1

Si realmente no te importa si el argumento es un tipo int o una cadena con números, usa is_numeric. También volverá verdadero para los flotadores, aunque.

3

ctype no siempre return false en tipo entero.

foreach(range(-1000 , 1000)as $num){ 
    if(ctype_digit($num)){ 
     echo $num . ", "; 
    }  
} 

ctype_digit devuelve verdadero para el siguiente número entero de tipo.

-78, -77, -71,48,49,50,51,52,53,54,55,56,57,178,179,185, 256.257.258.259.260.261.262.263.264.265.266.267.268.269.270 a 1000

la práctica de base es a caso cada número a string eq strval ($ num) o (String) $ num en este caso el valor negativo (-78) siempre devolverá falso.


is_int le volverá cierto en el valor de tipo int entre -2147483647 a 2147483647. cualquier valor excede ese número le devolverá falsa presunción de que se está ejecutando en el sistema de 32 bits. de 64 bits que puede ir hasta el rango de -9223372036854775807 a 9223372036854775807


en términos de rendimiento personalmente muy difícil de decir. ctype_digit tal vez más rápido que is_int, pero si tiene que convertir cada valor en el rendimiento de la cadena, se reduce en general.

+0

ctype_digit es para uso en cadena única –

0

Ctype_digit devuelve falso si el rango del entero está en rango negativo o entre 0 y 47 o entre 58 y 255. Puede verificar el comportamiento de ctype_digit utilizando el siguiente fragmento de código.

setlocale(LC_ALL, 'en_US.UTF-8'); 
var_dump(
    true === array_every(range(-1000, -1), 'ctype_digit_returns_false'), 
    true === array_every(range(0, 47), 'ctype_digit_returns_false'), 
    true === array_every(range(48, 57), 'ctype_digit_returns_true'), 
    true === array_every(range(58, 255), 'ctype_digit_returns_false'), 
    true === array_every(range(256, 1000), 'ctype_digit_returns_true') 
); 

// https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/every 
function array_every(array $array, $callable) 
{ 
    $count = count($array); 

    for ($i = 0; $i < $count; $i +=1) { 

     if (!$callable($array[$i])) { 

      return false; 

     } 

    } 

    return true; 
} 

function ctype_digit_returns_true($v) 
{ 
    return true === ctype_digit($v); 
} 

function ctype_digit_returns_false($v) 
{ 
    return false === ctype_digit($v); 
} 
2

Existe también is_numeric que devuelve verdadero si se aprueba en el valor se puede analizar como número.

enter image description here

Si trato de comparar el desempeño de las funciones de PHP 5.5.30 aquí están los resultados:

enter image description here

Este es el código que he usado para referencia

// print table cell and highlight if lowest value is used 
function wr($time1, $time2, $time3, $i) { 
    if($i == 1) $time = $time1; 
    if($i == 2) $time = $time2; 
    if($i == 3) $time = $time3; 

    echo('<td>'); 
    if(min($time1, $time2, $time3) === $time) printf('<b>%.4f</b>', $time); 
    else printf('%.4f', $time); 
    echo('</td>'); 
} 


$test_cases = array(123, 12.3, '123', true); 
$tests = 1000000; 
$result = true; // Used just to make sure cycles won't get optimized out 
echo('<table>'.PHP_EOL); 
echo('<tr><td>&nbsp;</td><th>is_int</th><th>ctype_digit</th><th>is_numeric</th></tr>'); 
foreach($test_cases as $case) { 
    echo('<tr><th>'.gettype($case).'</th>'); 

    $time = microtime(true); 
    for($i = 0; $i < $tests; $i++) { 
     $result |= is_int((int)rand()); 
    } 
    $time1 = microtime(true)-$time; 

    $time = microtime(true); 
    for($i = 0; $i < $tests; $i++) { 
     $result |= ctype_digit((int)rand()); 
    } 
    $time2 = microtime(true)-$time; 

    $time = microtime(true); 
    for($i = 0; $i < $tests; $i++) { 
     $result |= is_numeric((int)rand()); 
    } 
    $time3 = microtime(true)-$time; 

    wr($time1, $time2, $time3, 1); 
    wr($time1, $time2, $time3, 2); 
    wr($time1, $time2, $time3, 3); 
    echo('</tr>'.PHP_EOL); 
} 

echo('</table>'); 

exit(); 
0

Bueno, es muy interesante :) aquí es todo historia:

is_numeric: - Encuentra si una variable es un número o una cadena numérica, Sin importar el valor es negativo o Booleano o Cadena o cualquier tipo de número, si el valor es puramente número devolverá 'true' else 'false'.

Recuerde: No personaje sólo Número cualquier tipo :)


is_init - Encuentra si el tipo de una variable es entero, si el valor es puramente entero, entonces se volverá 'verdadero', más 'falso'.

Recuerde: Ningún personaje, doble o negativa, sólo números enteros


in_integer - Alias ​​de is_int()


intval: - Obtener el valor entero de una variable, es tomar todo tipo de valor y devuelve sólo un valor entero, si los valores son negativos a continuación, '-Integer' valor devoluciones. No importa los valores sean Integer, Float, Negativo o 'NumberString' o 'NumberStringCharacter'. Resta los valores enteros de la cadena "If String Starts with Number".

  • numberString = Un valor numérico en la cadena de formato
  • NumberStringCharacter = Una cadena de inicialización con número de

Recuerde: Usted obtendrá valor entero del número, del flotador, negativa o cuerdas que comienza con Number.


ctype_digit - Chequear posibles caracteres (s) numérico, si un número entero suministrado en cadena de formato obtendrá 'true' otra cosa 'false'. Funcionará con con StringNumber, No Float, No solo Negativo Número entero como String.

Recuerde: Número entero como cadena, número no negativo, número de flotante, tipo de número, sin carácter, número único como cadena.

ojo de pájaros:

enter image description here

Gracias a http://php.net/

Cuestiones relacionadas