php - 数组 PHP 中的类似查找
问题描述
有没有办法让我从相似但不相同的针中找到数组中的项目?
例如:我想在数组中查找“Allan”,但取出“Alan”
这是可能的吗?
解决方案
使用变音器
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 == WL
2 。
-注意-这仅返回第一个结果,但扩展它以找到所有结果将是微不足道的。像这样
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
)
推荐阅读
- sql - 如何为记录添加权重以查找最匹配的结果
- dockerfile - dockerfile 中的 apt-get update 会破坏应用程序的一致性?
- excel - ADODB Recordset:关闭对象时不允许操作
- sonarqube - 我如何知道哪条规则对 sonarqube web api 有效或无效?
- reactjs - material-ui createMuiTheme 调色板类型深色不会将文本颜色更改为浅色
- python - 根据正在运行的测试用例切换装饰器的顺序?
- javascript - Typescript - 将 ngModel 绑定到对象的属性
- java - 尝试创建一系列对话,其中每个对话都有前一个和下一个
- excel - Excel - 创建具有多个条件的唯一值列表
- ffmpeg - 检测视频帧偏移以智能方式同步视频