當前位置: 首頁> 最新文章列表> 如何用array_filter() 實現簡易的搜索過濾

如何用array_filter() 實現簡易的搜索過濾

M66 2025-06-03

在PHP 中, array_filter()是一個非常實用的函數,常用於根據某些條件從數組中過濾數據。本文將通過一個簡單的示例,演示如何利用array_filter()來實現一個基礎的搜索和過濾功能。

什麼是array_filter()

array_filter()是PHP 的內建函數,用於過濾數組中的元素。它的語法如下:

 array_filter(array $array, ?callable $callback = null, int $mode = 0): array

其中:

  • $array :待過濾的數組;

  • $callback :用於判斷每個元素是否保留的回調函數;

  • $mode :可選參數,用於指定回調函數接收的是鍵值、鍵名還是兩者。

如果不傳回調函數, array_filter()會去掉值為false的元素(包括nullfalse 、空字符串、0 等)。

示例場景:搜索產品列表

假設我們有一個產品列表,每個產品是一個包含namecategory的數組項。我們希望根據關鍵詞搜索產品名稱中包含該詞的產品。

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