在 PHP 开发中,我们经常需要对数组中的元素进行过滤,特别是当我们想找出包含某些关键词的字符串元素时。这个时候,stripos 和 array_filter 的组合就是一个非常实用的解决方案。
本文将一步步带你了解如何使用 stripos 搭配 array_filter 来实现这一功能。
stripos() 是 PHP 中的一个字符串函数,用于查找一个字符串在另一个字符串中首次出现的位置(不区分大小写)。如果找到则返回位置(从 0 开始),如果找不到则返回 false。
语法如下:
stripos(string $haystack, string $needle): int|false
例如:
stripos("Hello World", "world"); // 返回 6
array_filter() 是 PHP 中用于通过回调函数过滤数组的函数。它会遍历数组中的每一个元素,把不符合回调函数返回值为 true 的元素过滤掉。
语法如下:
array_filter(array $array, ?callable $callback = null, int $mode = 0): array
下面我们来看一个实用的例子:我们有一个包含多个 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 实用技巧感兴趣,欢迎关注更多编程小贴士!