在 PHP 中,array_filter() 是一个非常实用的函数,常用于根据某些条件从数组中过滤数据。本文将通过一个简单的示例,演示如何利用 array_filter() 来实现一个基础的搜索和过滤功能。
array_filter() 是 PHP 的内建函数,用于过滤数组中的元素。它的语法如下:
array_filter(array $array, ?callable $callback = null, int $mode = 0): array
其中:
$array:待过滤的数组;
$callback:用于判断每个元素是否保留的回调函数;
$mode:可选参数,用于指定回调函数接收的是键值、键名还是两者。
如果不传回调函数,array_filter() 会去掉值为 false 的元素(包括 null、false、空字符串、0 等)。
假设我们有一个产品列表,每个产品是一个包含 name 和 category 的数组项。我们希望根据关键词搜索产品名称中包含该词的产品。
$products = [
['name' => 'iPhone 15', 'category' => 'electronics'],
['name' => 'MacBook Pro', 'category' => 'electronics'],
['name' => 'Espresso Machine', 'category' => 'home appliances'],
['name' => 'Running Shoes', 'category' => 'fashion'],
['name' => 'iPhone Case', 'category' => 'accessories'],
];
用户通过 URL 传入搜索关键字:
// 示例 URL:https://m66.net/search.php?keyword=iphone
$keyword = isset($_GET['keyword']) ? strtolower(trim($_GET['keyword'])) : '';
接下来使用 array_filter() 进行搜索:
$filteredProducts = array_filter($products, function ($product) use ($keyword) {
return strpos(strtolower($product['name']), $keyword) !== false;
});
最后,我们可以将筛选后的产品列表输出:
foreach ($filteredProducts as $product) {
echo "<p>" . htmlspecialchars($product['name']) . " - " . htmlspecialchars($product['category']) . "</p>";
}
<?php
// products.php
$products = [
['name' => 'iPhone 15', 'category' => 'electronics'],
['name' => 'MacBook Pro', 'category' => 'electronics'],
['name' => 'Espresso Machine', 'category' => 'home appliances'],
['name' => 'Running Shoes', 'category' => 'fashion'],
['name' => 'iPhone Case', 'category' => 'accessories'],
];
$keyword = isset($_GET['keyword']) ? strtolower(trim($_GET['keyword'])) : '';
$filteredProducts = array_filter($products, function ($product) use ($keyword) {
return strpos(strtolower($product['name']), $keyword) !== false;
});
?>
<!DOCTYPE html>
<html>
<head>
<title>搜索结果 - m66.net</title>
</head>
<body>
<h1>搜索结果</h1>
<?php if (empty($keyword)): ?>
<p>请输入搜索关键字。</p>
<?php elseif (empty($filteredProducts)): ?>
<p>没有找到与“<?php echo htmlspecialchars($keyword); ?>”相关的产品。</p>
<?php else: ?>
<?php foreach ($filteredProducts as $product): ?>
<p><?php echo htmlspecialchars($product['name']); ?> - <?php echo htmlspecialchars($product['category']); ?></p>
<?php endforeach; ?>
<?php endif; ?>
</body>
</html>
array_filter() 是 PHP 中非常强大的一个工具函数,尤其适合处理数组搜索与条件过滤的任务。通过结合匿名函数与 use 语法,我们可以快速构建出灵活而简洁的过滤逻辑。以上的搜索示例就是一个实用的小功能,适用于简单的产品或文章搜索系统。
如果你正在开发一个轻量级的搜索模块,不妨尝试一下 array_filter(),它可能比你想象中更好用!