在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() ,它可能比你想像中更好用!