当前位置: 首页> 最新文章列表> 为什么在 PHP 中使用 array_filter() 时,值为 0 的元素会被删除?

为什么在 PHP 中使用 array_filter() 时,值为 0 的元素会被删除?

M66 2025-06-05

在 PHP 中,array_filter() 函数用于过滤数组中的元素,根据指定的回调函数来判断是否保留该元素。如果没有指定回调函数,array_filter() 将使用默认的回调函数来过滤数组,这个默认的回调函数会删除那些被认为是“假值”的元素。PHP 中的“假值”包括:falsenull0""(空字符串)、array()(空数组)以及0.0

因此,当你在 PHP 中使用 array_filter() 时,如果数组中的元素值为 0,它会被认为是一个假值,并被删除。为了更好地理解这个问题,我们可以通过一个具体的例子来展示 array_filter() 的行为。

示例 1:array_filter() 默认行为

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

$filtered = array_filter($array);

print_r($filtered);
?>

输出:

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

在上面的代码中,我们创建了一个包含多个整数的数组,包含了几个 0 元素。当我们使用 array_filter() 时,所有值为 0 的元素被删除,因为 0 被认为是一个假值。

为什么会这样?

这是因为 array_filter() 函数的默认行为是将所有被认为是“假值”的元素从数组中移除。PHP 的类型转换规则决定了 0 是一个假值。具体来说,0 被转换为 false,而 false 会导致 array_filter() 删除该元素。

如何保留值为 0 的元素?

如果你希望保留值为 0 的元素,可以通过提供一个自定义的回调函数来实现。例如:

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

$filtered = array_filter($array, function($value) {
    return $value === 0 || $value > 0;
});

print_r($filtered);
?>

输出:

Array
(
    [0] => 0
    [1] => 1
    [2] => 2
    [3] => 3
    [5] => 4
    [6] => 5
    [7] => 0
)

在这个例子中,我们通过自定义回调函数来确保值为 0 的元素被保留下来,而其他的元素则根据我们的逻辑进行过滤。

总结

使用 array_filter() 时,值为 0 的元素会被删除,因为 PHP 将 0 视为假值。在没有提供回调函数的情况下,array_filter() 会自动删除这些假值。如果你需要保留 0 或其他特定的值,可以提供一个自定义的回调函数来控制过滤的行为。