当前位置: 首页> 最新文章列表> array_filter函数的基本用法和参数都有哪些?详细解析如何正确使用array_filter

array_filter函数的基本用法和参数都有哪些?详细解析如何正确使用array_filter

gitbox 2025-07-26

在PHP中,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>

参数说明:

  1. array (必需)
    这是你想要进行过滤操作的数组。

  2. callback (可选)
    这是一个回调函数,用于判断数组的每个元素是否满足某个条件。如果该参数被设置为 nullarray_filter 将会去除数组中的所有“空”值,如 false, null, 0, 空字符串等。

  3. mode (可选)
    这是一个常量,用于决定如何使用回调函数来判断数组元素。常用的模式有:

    • ARRAY_FILTER_USE_KEY:回调函数接收数组的键而不是值。

    • ARRAY_FILTER_USE_BOTH:回调函数同时接收键和值。

基本用法

下面是一些常见的 array_filter 使用示例:

示例 1:过滤掉数组中的“空”值

<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$arr</span></span><span> = [</span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-literal">false</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-literal">null</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">'apple'</span></span><span>, </span><span><span class="hljs-string">''</span></span><span>, </span><span><span class="hljs-number">4</span></span><span>];

</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_filter</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

输出:

<span><span>Array
(
    [</span><span><span class="hljs-meta">1</span></span><span>] =&gt; </span><span><span class="hljs-number">1</span></span><span>
    [</span><span><span class="hljs-meta">3</span></span><span>] =&gt; </span><span><span class="hljs-number">2</span></span><span>
    [</span><span><span class="hljs-meta">5</span></span><span>] =&gt; </span><span><span class="hljs-number">3</span></span><span>
    [</span><span><span class="hljs-meta">6</span></span><span>] =&gt; apple
    [</span><span><span class="hljs-meta">8</span></span><span>] =&gt; </span><span><span class="hljs-number">4</span></span><span>
)
</span></span>

在这个示例中,array_filter 过滤掉了所有值为 falsenull0、空字符串等“空”值。

示例 2:使用回调函数过滤数组

<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$arr</span></span><span> = [</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-number">4</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>];

</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_filter</span></span><span>(</span><span><span class="hljs-variable">$arr</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-variable">$value</span></span><span> % </span><span><span class="hljs-number">2</span></span><span> == </span><span><span class="hljs-number">0</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">$result</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

输出:

<span><span>Array
(
    [</span><span><span class="hljs-meta">1</span></span><span>] =&gt; </span><span><span class="hljs-number">2</span></span><span>
    [</span><span><span class="hljs-meta">3</span></span><span>] =&gt; </span><span><span class="hljs-number">4</span></span><span>
)
</span></span>

在这个例子中,array_filter 使用一个回调函数来检查数组中的每个元素是否是偶数,返回值为 true 时,元素就会被保留。

示例 3:使用 ARRAY_FILTER_USE_KEY 根据键过滤

<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$arr</span></span><span> = [
    </span><span><span class="hljs-string">'first'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>,
    </span><span><span class="hljs-string">'second'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>,
    </span><span><span class="hljs-string">'third'</span></span><span> =&gt; </span><span><span class="hljs-number">3</span></span><span>,
    </span><span><span class="hljs-string">'fourth'</span></span><span> =&gt; </span><span><span class="hljs-number">4</span></span><span>
];

</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_filter</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>, function(</span><span><span class="hljs-variable">$key</span></span><span>) {
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$key</span></span><span>, </span><span><span class="hljs-string">'t'</span></span><span>) === </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-comment">// 只保留键以't'开头的元素</span></span><span>
}, ARRAY_FILTER_USE_KEY);

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

输出:

<span><span>Array
(
    [</span><span><span class="hljs-meta">third</span></span><span>] =&gt; </span><span><span class="hljs-number">3</span></span><span>
    [</span><span><span class="hljs-meta">fourth</span></span><span>] =&gt; </span><span><span class="hljs-number">4</span></span><span>
)
</span></span>

这个例子演示了如何根据数组键进行过滤,ARRAY_FILTER_USE_KEY 让回调函数接收数组的键而不是值。

示例 4:使用 ARRAY_FILTER_USE_BOTH 同时使用键和值

<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$arr</span></span><span> = [
    </span><span><span class="hljs-string">'apple'</span></span><span> =&gt; </span><span><span class="hljs-number">5</span></span><span>,
    </span><span><span class="hljs-string">'banana'</span></span><span> =&gt; </span><span><span class="hljs-number">0</span></span><span>,
    </span><span><span class="hljs-string">'orange'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>,
    </span><span><span class="hljs-string">'grape'</span></span><span> =&gt; </span><span><span class="hljs-number">3</span></span><span>
];

</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_filter</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>, function(</span><span><span class="hljs-variable">$value</span></span><span>, </span><span><span class="hljs-variable">$key</span></span><span>) {
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$value</span></span><span> &gt; </span><span><span class="hljs-number">1</span></span><span> &amp;&amp; </span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$key</span></span><span>, </span><span><span class="hljs-string">'a'</span></span><span>) !== </span><span><span class="hljs-literal">false</span></span><span>; </span><span><span class="hljs-comment">// 保留值大于1且键中包含'a'的元素</span></span><span>
}, ARRAY_FILTER_USE_BOTH);

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

输出:

<span><span>Array
(
    [</span><span><span class="hljs-meta">apple</span></span><span>] =&gt; </span><span><span class="hljs-number">5</span></span><span>
    [</span><span><span class="hljs-meta">orange</span></span><span>] =&gt; </span><span><span class="hljs-number">2</span></span><span>
)
</span></span>

此示例使用 ARRAY_FILTER_USE_BOTH,让回调函数同时使用键和值进行过滤操作。结果会保留值大于1且键中包含字母 'a' 的元素。

注意事项

  1. 回调函数的返回值:
    回调函数的返回值必须是布尔值 truefalse。如果返回 true,则该元素会被保留,返回 false 时则会被剔除。

  2. 性能考虑:
    array_filter 会遍历整个数组进行检查。如果数组非常大,且回调函数很复杂,可能会影响性能。在这种情况下,考虑是否可以优化回调函数,或者使用其他方法。

  3. 键的保持:
    array_filter 在过滤时会保持原始数组的键。这意味着如果你从数组中剔除了元素,结果数组中的键将不会重新索引。

结论

array_filter 是一个非常强大的函数,可以用来根据各种条件过滤数组中的元素。它不仅支持基本的过滤操作,还提供了灵活的回调函数和多种模式,能够帮助你在处理数据时更加高效。理解和正确使用 array_filter 可以让你的代码更加简洁和高效,尤其是在处理大规模数据或需要特定过滤条件的场景中。