是否有任何PHP函数可以解决另一个数组值字符串中的数组值匹配



我正在创建一个单词搜索,但我想根据搜索关键字的最高存在对它们进行排名。如何解决这个问题?

我正在尝试搜索数组 1 中是否存在数组 2 键,然后按数组 1 中数组 2 的总出现次数对数组进行排序。

吹是我的代码

$str = "Hello World January Jude";
$arr1 = ["Hello World January Jude Lol Love","Hello Lol Loop","Love Life Jude","Crude Flash Hello"];
$str = explode(" ", $str);
echo sort_base($arr1, $str);
function sort_base($arr, $str){
$count = "";
foreach ($arr as $valuer){
    foreach ($str as $value){
    //$list[] = strpos($valuer, $value, 0);
    $count .= strpos($valuer, $value, 0)."<hr/>"; 
}
}
$arr = trim($count," ");
 echo $arr;
}

示例输入:

$array = ["Say Hello","Hello World"," Hello World Cup Final","Hello Cup","Hello","World"]; 
$str = "Hello World Cup"; 

愿望输出

按顺序排列的数组:

  1. 你好世界杯
  2. 最终的你好世界
  3. 你好杯
  4. 你好
  5. 世界
  6. 打招呼
您可以使用

array-intersectcount来实现相似单词的数字值。现在您可以使用usort进行排序。

请考虑以下事项:

function sort_most_exists_asc($arr, $str) {
    usort($arr, function ($a, $b) use ($str) {
        $aa = count(array_intersect(explode(" ", $str), explode(" ", $a)));
        $bb = count(array_intersect(explode(" ", $str), explode(" ", $b)));
        return $bb - $aa;
    });
    return $arr;
}
$str = "Hello World January Jude";
$arr = ["Hello World January Jude Lol Love","Hello Lol Loop","Love Life Jude","Crude Flash Hello"];
$arr = sort_most_exists_asc($arr, $str);

现场示例:3v4l

请注意,这仅适用于整个单词。对于单词相似性,请使用Levenshtein距离 - 并按usort中的距离进行比较

您可以在每个短语和目标单词列表之间创建一组所有匹配的单词。

foreach ($arr1 as $phrase) {
    $matches[] = array_intersect(str_word_count($phrase, 1), $str);
}

该匹配数组可以与array_multisort一起使用,以对原始数组进行重新排序。

array_multisort($matches, SORT_DESC, $arr1);

最新更新