从数组中删除非整数条目

25
我有一个像这样的PHP数组:
array( [0] => 1
       [1] => 2
       [2] => 3
       [3] => Some strings
)

如何从数组中删除非整数的条目? 我需要输出以下结果:

array( [0] => 1
       [1] => 2
       [2] => 3
)

有人可以给我提示吗?

4个回答

69

使用array_filteris_int一起使用

$filtered = array_filter($array, 'is_int');

编辑:

如评论中所述,使用以下任一选项可能是更好的解决方案。

$filtered = array_filter($array, 'is_numeric');
$filtered = array_filter($array, 'ctype_digit');

不错,我不知道有array_filter这个函数。 - Alfabravo
谢谢回复。array_filter检测到所有条目都是字符串。我该如何将整数条目转换为整数? - André
2
你可以看一下is_numeric,而不是使用is_int - adlawson
解决方法:使用以下代码:$filtered = array_filter($array, 'is_numeric'); - André
2
ctype_digit 可能比 is_numeric 更合适。 - goat
@goat 唯一的问题是,值的实际类型必须是“string”,才能使ctype_digit正常工作,如果它是一个“int”,那么它将失败。 - xorinzor

3
如果您正在使用$_POST$_GET中的输入,则以下每个都存在问题。
  • array_filter($array, 'is_numeric')也将接受小数值,例如2.5
  • array_filter($array, 'is_int');将拒绝大多数int输入,因为通过$_GET$_POST发布的值被视为字符串,即使它们包含有效的integers
  • array_filter($array, 'ctype_digit');将拒绝包含有效integers的输入,因为它仅匹配表示为字符串的整数。

因此,过滤仅包含有效整数的数组的最安全方法是

array_filter($ids, function($e){ return ctype_digit( (string) $e );})

0
如果您正在为数据库进行净化,请尝试:
$int_array = array_map('intval', $array);

所有内容都将被转换为整数,但无法转换的将会变成0


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接