Is_int () ve ctype_digit () arasında bir fark var mı?

6 Cevap php

Bir daha tercih veya diğer üzerinde daha iyi bir performans sergiliyor?

6 Cevap

Eğer endişesi gereken son şey bunlardan biridir ne kadar hızlı olduğunu. Bir tamsayı olduğu için bir dize kontrol kodunuzda bir darboğaz olacak hiçbir yolu yoktur.

Argüman bir int tipi veya sayı ile bir dize ise gerçekten umurumda değil, eğer is_numeric kullanın. Bu Tho, ayrıca yüzen için geçerlidir dönecektir.

ctype not zaman return false tamsayı türüne bağlıdır.

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

Aşağıdaki tamsayı tip numarası için true döndüren ctype_digit.

-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 to 1000

the base practice is to case every number to string e.q. strval($num) or (String) $num in this case negative value (-78) will always return false.


is_int will return you true on int type value between -2147483647 to 2147483647. any value exceed that number will return you false presuming it is running on 32bits system. on 64bits it can go up to range of -9223372036854775807 to 9223372036854775807


in term of performance personally very hard to say. ctype_digit maybe faster than is_int but if you have to cast every value to string performance is reduced overall.

Tamsayı aralığı negatif aralıkta veya 0 ila 47 veya 58 ile 255 arasında ise ctype_digit false döndürür. Aşağıdaki parçacığını kullanarak ctype_digit davranışlarını kontrol edebilirsiniz.

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);
}

Burada küçük bir düzeltme

ctype_digit "123" için VE 123 için true döndürür.

Ramito