繁体   English   中英

在 PHP 中匹配通配符数组 - WordPress

[英]Matching wildcard arrays in PHP - WordPress

PHP代码:

$search = "Who is KMichaele test";
$array = ["john","michael","adam"];

if (in_array($search, $array)) {
echo "success";
}
else
echo "fail";

我想要成功输出。 这怎么可能?

您可以使用array_reducestripos检查$array所有值,以查看它们是否以不区分大小写的方式出现在$search中:

$search = "Who is KMichaele test";
$array = ["john","michael","adam"];

if (array_reduce($array, 
                 function ($c, $i) use ($search) {
                     return $c || (stripos($search, $i) !== false);
                 },
                 false))
    echo "success";
else
    echo "fail";

输出:

success

编辑

由于这可能更有用包装在一个函数中,这里是如何做到这一点:

$search = "Who is KMichaele test";
$array = ["john","michael","adam"];

function search($array, $search) {
    return array_reduce($array, 
                         function ($c, $i) use ($search) {
                             return $c || (stripos($search, $i) !== false);
                         },
                         false);
}

if (search($array, $search))
    echo "success";
else
    echo "fail";

$search2 = "michael";
if (search($array, $search2))
    echo "success";
else
    echo "fail";

输出

success
success

这是一个in_array -esque 函数,它将忽略大小写并在匹配早期保释:

function search_array($search, $arr) {
    foreach ($arr as $item) {
        if (stripos($search, $item) !== false) {
            return 1;
        }
    }

    return 0;
}

$search = "Who is KMichaele test";
$array = ["john", "michael", "adam"];

if (search_array($search, $array)) {
    echo "success\n";
}
else {
    echo "fail\n";
}

输出

success

你可以用一个简单的 regx 来做到这一点

 $search = "Who is KMichaele test";
 $array = ["john","michael","adam"];
 $regex = '/\b('.implode('|', $array).')\b/i'; 
  ///\b(john|michael|adam)\b/i

 $success = preg_match($regex, $search);

正则表达式很简单

  • \\b - 匹配单词边界
  • | 或者

  • 标志 \\i,不区分大小写

基本匹配列表中的任何单词。

例如,通过使用边界,单词michael将不匹配kmichael 如果您想要部分单词匹配,只需删除那些。

没有边界的沙盒

如果您包含第三个参数

  $success = preg_match($regex, $search,$match);

你可以说出比赛是什么。 最后但同样重要的是,您可以将其减少到一行

 $success = preg_match('/\b('.implode('|', $array).')\b/i', $search);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM