首页 > 解决方案 > 数组 PHP 中的类似查找

问题描述

有没有办法让我从相似但不相同的针中找到数组中的项目?

例如:我想在数组中查找“Allan”,但取出“Alan”

这是可能的吗?

标签: phparrays

解决方案


使用变音器

function soundsLike($needle, $haystack){
    $sounds = metaphone($needle);
    foreach($haystack as $item){
        if( $sounds == metaphone($item, strlen($sounds)))return $item;
    }
}

echo soundsLike('will', ["trina","treena","alan","allan","William"]);

输出

"William"

沙盒

正如我在另一个答案的评论中所说,metaphone 比 soundx 更好,这里的关键是 metaphone 可以让您设置长度,可以根据针的长度动态设置。具体来说strlen($sounds)

这更好的原因是上面的例子。

 will = WL
 William = WLM

WL != WLM但是因为我们可以将长度设置为WL == WL2 。

-注意-这仅返回第一个结果,但扩展它以找到所有结果将是微不足道的。像这样

function soundsLike($needle, $haystack){
    $sounds = metaphone($needle);
    $matches = [];
    foreach($haystack as $item){
        if( $sounds == metaphone($item, strlen($sounds))) $matches[]=$item;
    }
    return $matches;
}

print_r(soundsLike('al', ["trina","treena","alan","allan","William"]));

输出

Array(
   [0] => alan
   [1] => allan
)

沙盒


推荐阅读