在PHP开发中,经常会遇到需要从一个混合类型的数组中过滤出特定类型的数据,比如我们今天要讲的:。这时,array_filter() 就派上用场了。
array_filter() 是PHP内置的数组函数之一,主要用于过滤数组中的元素。它接受一个数组和一个回调函数(可选),返回一个由回调函数返回 true 的元素组成的新数组。
array_filter(array $array, ?callable $callback = null, int $mode = 0): array
$array: 要过滤的数组。
$callback: 用户自定义函数,用于测试数组中的每个元素。
$mode: 可选参数,用来指定回调函数的参数是键、值还是两者。
下面是一个示例数组,包含了多种类型的元素:
$data = [
"apple",
42,
"banana",
true,
"cherry",
null,
3.14,
["nested", "array"],
(object) ["name" => "grape"]
];
我们的目标是:过滤掉所有非字符串的值,只保留字符串元素。
$filtered = array_filter($data, 'is_string');
print_r($filtered);
Array
(
[0] => apple
[2] => banana
[4] => cherry
)
注意,array_filter() 保留原数组的键名。如果你想让结果是一个重新索引的数组,可以使用 array_values():
$filtered = array_values(array_filter($data, 'is_string'));
如果你想扩展逻辑,比如只保留长度大于5的字符串,可以这样写:
$filtered = array_filter($data, function($item) {
return is_string($item) && strlen($item) > 5;
});
print_r($filtered);
假设你在处理一个表单数据数组时,需要从中提取用户填写的字符串信息:
$userInput = [
'username' => 'john_doe',
'age' => 28,
'email' => 'john@example.com',
'newsletter' => true,
'website' => 'https://m66.net/profile/john'
];
$stringsOnly = array_filter($userInput, 'is_string');
print_r($stringsOnly);
Array
(
[username] => john_doe
[email] => john@example.com
[website] => https://m66.net/profile/john
)
这样你就可以只处理文本类型的数据,比如用于发送电子邮件或构建数据库查询。
使用 array_filter() 搭配 is_string(),可以非常方便地从一个混合数组中过滤出所有字符串元素。这个方法简洁、效率高,非常适合日常PHP开发中对数组数据的清洗处理。