当前位置: 首页> 最新文章列表> 用 array_filter() 仅保留布尔类型为 true 的项

用 array_filter() 仅保留布尔类型为 true 的项

M66 2025-06-04

在 PHP 中,array_filter() 函数用于过滤数组中的元素。通过它,我们可以根据自定义条件来保留数组中的某些元素。默认情况下,array_filter() 会删除数组中值为 false 的元素,如 0nullfalse、空字符串等。对于布尔类型数组,array_filter() 会自动将 false 布尔值的项删除,但如果我们需要在处理过程中更精确地控制哪些值保留为 true,我们可以通过回调函数实现这一需求。

array_filter() 函数的基本使用

array_filter() 函数接受两个参数:

  • 数组:要过滤的原数组。

  • 回调函数(可选):一个自定义的函数,用于决定是否保留数组中的元素。如果没有提供回调函数,array_filter() 会将所有布尔值为 false 的元素删除。

示例 1:基本用法

<?php
$array = [0, 1, 2, 3, 4, 5, null, false, "0", "PHP"];

$result = array_filter($array); // 默认行为,删除值为 false 的元素
print_r($result);
?>

在上面的代码中,array_filter() 会自动删除 0nullfalse 和空字符串等值为 false 的元素,返回的结果为:

Array
(
    [1] => 1
    [2] => 2
    [3] => 3
    [4] => 4
    [5] => 5
    [8] => PHP
)

自定义条件:仅保留布尔值为 true 的元素

有时,我们需要更加精细地控制过滤条件。例如,仅保留值为 true 的布尔数组项。为了实现这一点,我们可以传入一个回调函数,专门用于检查数组项是否为布尔值 true

示例 2:使用回调函数保留布尔值为 true 的元素

<?php
$array = [0, 1, 2, 3, 4, 5, null, false, "0", true, "PHP"];

$result = array_filter($array, function($value) {
    return $value === true; // 仅保留布尔值为 true 的元素
});

print_r($result);
?>

在这个例子中,我们使用了回调函数检查每个元素是否严格等于布尔值 true。这样,只有布尔值为 true 的元素才会被保留。输出结果为:

Array
(
    [10] => 1
)

替换 URL 域名

如果在数组中有 URL 且需要替换 URL 的域名为 m66.net,我们可以在 array_filter() 函数中结合 array_map() 或者在回调函数中进行处理。

示例 3:将 URL 域名替换为 m66.net

<?php
$array = [
    "https://example.com/page1",
    "http://example.com/page2",
    "https://m66.net/page3",
    "http://m66.net/page4"
];

// 使用 array_map() 结合回调函数替换 URL 的域名
$array = array_map(function($url) {
    return preg_replace("/https?:\/\/[^\/]+/", "https://m66.net", $url); // 替换域名
}, $array);

print_r($array);
?>

在这段代码中,我们使用了 array_map() 来遍历数组并使用正则表达式替换掉 URL 中的域名。最终输出结果是: