当前位置: 首页> 最新文章列表> 想过滤数组中的整数?看看 is_int 和 array_filter 的高效组合用法

想过滤数组中的整数?看看 is_int 和 array_filter 的高效组合用法

gitbox 2025-08-27

在 PHP 中,处理数组是一项常见的任务,特别是在数据清洗、过滤和转换的过程中。当你需要从一个混合数组中提取出所有的整数值时,可能会遇到不少挑战。幸运的是,PHP 提供了强大的工具,使得这个过程既高效又简单。本文将通过 is_intarray_filter 函数的组合,展示如何轻松地过滤数组中的整数。

1. array_filter 简介

array_filter 函数用于遍历数组,并通过回调函数来决定是否保留数组中的某个元素。它的语法如下:

<span><span><span class="hljs-title function_ invoke__">array_filter</span></span><span>(</span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$array</span></span><span>, ?</span><span><span class="hljs-keyword">callable</span></span><span> </span><span><span class="hljs-variable">$callback</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$mode</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>): </span><span><span class="hljs-keyword">array</span></span><span>
</span></span>
  • $array:待处理的数组。

  • $callback:一个回调函数,用于过滤数组中的元素。若回调返回 true,该元素将被保留;返回 false,则该元素被丢弃。

  • $mode:过滤模式,决定回调函数的参数。

若不传递 $callback 参数,array_filter 默认会删除值为 false(包括空字符串、0、null 等)的元素。

2. is_int 简介

is_int 是一个用于检查变量是否为整数的 PHP 内建函数。其语法如下:

<span><span><span class="hljs-title function_ invoke__">is_int</span></span><span>(</span><span><span class="hljs-keyword">mixed</span></span><span> </span><span><span class="hljs-variable">$var</span></span><span>): </span><span><span class="hljs-keyword">bool</span></span><span>
</span></span>
  • $var:待检查的变量。

  • 返回值:如果 $var 是整数,返回 true;否则返回 false

3. 结合 is_intarray_filter 实现整数过滤

要过滤数组中的所有整数,最简单的方式就是将 is_intarray_filter 结合使用。你只需要提供一个回调函数,让其调用 is_int 来检查每个数组元素是否为整数。

<span><span><span class="hljs-meta">&lt;?php</span></span><span>

</span><span><span class="hljs-comment">// 定义一个混合类型的数组</span></span><span>
</span><span><span class="hljs-variable">$array</span></span><span> = [</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'apple'</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-number">3.5</span></span><span>, </span><span><span class="hljs-number">4</span></span><span>, </span><span><span class="hljs-string">'banana'</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>, </span><span><span class="hljs-literal">null</span></span><span>];

</span><span><span class="hljs-comment">// 使用 array_filter 和 is_int 过滤出整数</span></span><span>
</span><span><span class="hljs-variable">$integers</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_filter</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>, </span><span><span class="hljs-string">'is_int'</span></span><span>);

</span><span><span class="hljs-comment">// 输出结果</span></span><span>
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$integers</span></span><span>);

</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

输出:

<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [</span><span><span class="hljs-number">0</span></span><span>] =&gt; </span><span><span class="hljs-number">1</span></span><span>
    [</span><span><span class="hljs-number">2</span></span><span>] =&gt; </span><span><span class="hljs-number">2</span></span><span>
    [</span><span><span class="hljs-number">4</span></span><span>] =&gt; </span><span><span class="hljs-number">4</span></span><span>
    [</span><span><span class="hljs-number">6</span></span><span>] =&gt; </span><span><span class="hljs-number">5</span></span><span>
)
</span></span>

在这个例子中,array_filter 会遍历 $array 数组,并对每个元素调用 is_int 函数。只有当元素是整数时,is_int 返回 truearray_filter 就会保留该元素。

4. 注意事项

4.1 数值 0 和 false

如果数组中包含 0 或者 false,这些元素不会被 array_filter 过滤掉,除非你明确地告诉它要排除掉这些值。如果你只关心整数类型而不关心值,可以继续使用 is_int 过滤。

4.2 其他数字类型

如果你还希望过滤掉浮点数(如 3.5),可以通过调整回调函数的逻辑来实现。例如,使用 is_float 进一步过滤。

<span><span><span class="hljs-variable">$filtered</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_filter</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>, function(</span><span><span class="hljs-variable">$value</span></span><span>) {
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">is_int</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>) &amp;&amp; !</span><span><span class="hljs-title function_ invoke__">is_float</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>);
});
</span></span>

5. 性能优化

array_filter 本身是一个高效的函数,能够处理较大的数据集。如果你有一个庞大的数组需要处理,确保 is_int 等函数的回调逻辑尽可能简单,因为回调函数会在每次遍历时被调用。

如果你对性能有更高的要求,可以尝试使用原生的 foreach 循环来手动过滤数组,避免 array_filter 的一些开销:

<span><span><span class="hljs-meta">&lt;?php</span></span><span>

</span><span><span class="hljs-variable">$integers</span></span><span> = [];
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$array</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$item</span></span><span>) {
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_int</span></span><span>(</span><span><span class="hljs-variable">$item</span></span><span>)) {
        </span><span><span class="hljs-variable">$integers</span></span><span>[] = </span><span><span class="hljs-variable">$item</span></span><span>;
    }
}

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$integers</span></span><span>);

</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

6. 结论

通过结合 is_intarray_filter,我们能够轻松而高效地从数组中筛选出所有的整数值。这个方法非常适合需要对数据进行快速清理和过滤的场景。虽然 array_filter 提供了一种简洁的语法,但如果你的数组特别庞大,foreach 循环可能会提供更好的性能。总的来说,选择合适的工具和方法,能够帮助你提高代码的效率和可读性。