当前位置: 首页> 最新文章列表> 用 stripos + array_filter 过滤含指定词的数组元素

用 stripos + array_filter 过滤含指定词的数组元素

M66 2025-05-31

在 PHP 开发中,我们经常需要对数组中的元素进行过滤,特别是当我们想找出包含某些关键词的字符串元素时。这个时候,striposarray_filter 的组合就是一个非常实用的解决方案。

本文将一步步带你了解如何使用 stripos 搭配 array_filter 来实现这一功能。

什么是 stripos?

stripos() 是 PHP 中的一个字符串函数,用于查找一个字符串在另一个字符串中首次出现的位置(不区分大小写)。如果找到则返回位置(从 0 开始),如果找不到则返回 false

语法如下:

stripos(string $haystack, string $needle): int|false

例如:

stripos("Hello World", "world"); // 返回 6

什么是 array_filter?

array_filter() 是 PHP 中用于通过回调函数过滤数组的函数。它会遍历数组中的每一个元素,把不符合回调函数返回值为 true 的元素过滤掉。

语法如下:

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

stripos + array_filter 的组合使用

下面我们来看一个实用的例子:我们有一个包含多个 URL 的数组,我们想过滤出所有包含某个关键词(比如 “login”)的元素。

示例代码:

<?php

$urls = [
    "https://m66.net/home",
    "https://m66.net/user/login",
    "https://m66.net/about",
    "https://m66.net/admin/login",
    "https://m66.net/contact"
];

$keyword = "login";

$filtered = array_filter($urls, function($url) use ($keyword) {
    return stripos($url, $keyword) !== false;
});

print_r($filtered);

输出结果:

Array
(
    [1] => https://m66.net/user/login
    [3] => https://m66.net/admin/login
)

如你所见,只有包含 "login" 的 URL 被保留下来了。

灵活扩展:支持多个关键词

如果你想支持多个关键词,可以对回调函数稍作修改:

<?php

$keywords = ["login", "admin"];
$filtered = array_filter($urls, function($url) use ($keywords) {
    foreach ($keywords as $word) {
        if (stripos($url, $word) !== false) {
            return true;
        }
    }
    return false;
});

print_r($filtered);

这将返回包含任一关键词的 URL,灵活且强大。

结语

使用 stripos 搭配 array_filter 是处理字符串数组中关键词匹配的一个简单高效的方式。它不仅代码简洁,逻辑清晰,而且适用于多种实际场景,比如日志分析、URL 路由匹配、内容过滤等。

你可以根据自己的需求,将这个逻辑进一步封装为一个函数,提高复用性和可维护性。

如果你对这类 PHP 实用技巧感兴趣,欢迎关注更多编程小贴士!