是一个更优先,还是比另一个更好?
答案 0 :(得分:83)
is_int()
返回true,ctype_digit()
接受字符串参数,如果字符串中的所有字符都是数字,则返回true。
示例:强>
┌──────────┬───────────┬────────────────┐
│ │ is_int: │ ctype_digit: │
├──────────┼───────────┼────────────────┤
│ 123 │ true │ false │
├──────────┼───────────┼────────────────┤
│ 12.3 │ false │ false │
├──────────┼───────────┼────────────────┤
│ "123" │ false │ true │
├──────────┼───────────┼────────────────┤
│ "12.3" │ false │ false │
├──────────┼───────────┼────────────────┤
│ "-1" │ false │ false │
├──────────┼───────────┼────────────────┤
│ -1 │ true │ false │
└──────────┴───────────┴────────────────┘
答案 1 :(得分:4)
答案 2 :(得分:3)
你最不应该担心的是其中一个是多么快。检查字符串是否为整数无法成为代码中的瓶颈。
答案 3 :(得分:3)
ctype 不总是在整数类型上返回false 。
foreach(range(-1000 , 1000)as $num){
if(ctype_digit($num)){
echo $num . ", ";
}
}
ctype_digit对于以下整数类型编号返回true。
-78,-77,-71,48,49,50,51,52,53,54,55,56,57,178,179,185, 1000,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270
基本做法是将每个数字设为字符串e.q. strval($ num)或(String)$ num 在这种情况下,负值(-78)将始终返回false。
is_int将在-2147483647到2147483647之间的int类型值上返回true。
超过该数字的任何值都将返回错误,假设它在32位系统上运行。
在64位上它可以达到-9223372036854775807至9223372036854775807的范围
在表现方面个人很难说。 ctype_digit可能比is_int快,但是如果必须将每个值转换为字符串,则整体性能会降低。
答案 4 :(得分:1)
如果您不关心参数是int类型还是带数字的字符串,请使用is_numeric。对于浮子也会返回true,tho。
答案 5 :(得分:0)
如果整数范围在负范围内或在0到47之间或在58到255之间,则Ctype_digit返回false。您可以使用以下代码段检查ctype_digit的行为。
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);
}
答案 6 :(得分:0)
嗯,这很有趣:)以下是故事:
is_numeric:
- 查找变量是数字还是数字字符串,无论值为负数还是布尔值或字符串或任何类型 数字,如果值是纯数字,它将返回'true'
其他'false'
。请记住:无任何字符编号任何类型:)
is_init
- 查找变量的类型是否为整数,如果value为纯整数,则返回'true',否则为'false'。请记住:没有字符,双重或否定,只有整数
in_integer
- is_int()的别名
intval:
- 获取变量的整数值,它取所有类型的值并仅返回Integer值,如果值为负则则 返回“-Integer
”值。无论值是Integer,Float, 否定或“NumberString
”或“NumberStringCharacter
”。 它从字符串“If String Starts with Number
”中减去整数值。
- NumberString =字符串格式的数字值
- NumberStringCharacter =字符串以数字开头
请记住:您将从Number,Float,Negative或String获取Integer值,该值以Number开头。
ctype_digit
- 检查数字字符,如果以字符串格式提供整数,您将获得“true
”其他'的false
强>'。它会 仅使用StringNumber,No Float,No Negative only Whole Number as String。请记住:整数字符串,无负数,无浮点数,无数字类型,无字符,仅数字作为字符串。
鸟瞰图