在 PHP 中,array_filter() 是一个非常实用的函数,它可以用来自定义筛选数组中的元素。通过传入一个回调函数,我们可以根据特定的逻辑条件来保留或移除数组中的元素。在本文中,我们将介绍如何使用 array_filter() 筛选出数组中。
array_filter(array $array, ?callable $callback = null, int $mode = 0): array
$array:需要被过滤的原始数组。
$callback:用于判断每个元素是否保留的回调函数,返回 true 表示保留,false 表示剔除。
$mode:可选参数,用于控制传入回调函数的参数(键、值或键值对)。
如果没有提供 $callback,默认会过滤掉值为 false 的元素(例如 0、空字符串、null 等)。
假设我们有一个数组,其中包含各种类型的数据,比如字符串、浮点数、布尔值和整数。我们希望只保留整数。
<?php
$data = [1, '2', 3.5, 4, 'hello', true, 0, null, 7, '8'];
$integers = array_filter($data, function ($item) {
return is_int($item);
});
print_r($integers);
?>
Array
(
[0] => 1
[3] => 4
[8] => 7
)
可以看到,数组中只有真正的整数被保留下来了,而像 '2'(字符串)或 3.5(浮点数)都被过滤掉了。
默认情况下,array_filter() 会保留原数组的键索引。如果你想重新索引,可以使用 array_values():
$integers = array_values(array_filter($data, function ($item) {
return is_int($item);
}));
这种过滤方式在实际开发中非常有用。例如,你从用户输入或远程 API 获取到一个混合数据数组,需要对其进行类型验证或数据清洗时,可以使用 array_filter() 快速处理。
比如:
// 模拟从远程接口获取到的数据
$response = json_decode(file_get_contents("https://api.m66.net/data"), true);
$cleaned = array_filter($response['values'], function ($value) {
return is_int($value);
});
这段代码中,我们从 https://api.m66.net/data 获取到数据后,使用 array_filter() 把非整数值都剔除了。
array_filter() 是 PHP 中一个功能强大的数组处理函数,配合回调函数可以实现各种自定义筛选逻辑。通过它,我们可以方便地从数组中提取出需要的元素,比如整数、字符串或者符合特定规则的数据。
记住,配合 is_int() 这样的内置类型检测函数使用,可以让你的数据更干净、更可靠,也让代码更加优雅。
如果你有更多处理数组的需求,array_map()、array_reduce() 这些函数也是很值得一试的利器!