比较多个字符串并在php中找到类似的子字符串

比较多个字符串并在php中找到类似的子字符串,php,Php,我必须开发一个算法,该算法将获得多个字符串,并在所有这些字符串中找到匹配的子字符串。并将百分比添加到匹配的文本中 比如说 这是第一个字符串-100% 这是第二个字符串-76% 一个原始的PHP解决方案是 function getStringPercentages(inputs, needles) { $outputs = []; foreach ($inputs as $input) { $count = 0; foreach ($needles

我必须开发一个算法,该算法将获得多个字符串,并在所有这些字符串中找到匹配的子字符串。并将百分比添加到匹配的文本中

比如说

这是第一个字符串-100%

这是第二个字符串-76%

一个原始的PHP解决方案是

function getStringPercentages(inputs, needles) {
    $outputs = [];
    foreach ($inputs as $input) {
        $count = 0;
        foreach ($needles as $needle) {
            if (strpos($input, $needle) !== false) $count++;
        }
        $outputs[$input] = ($count / count($outputs)) * 100;
    }
}
然后您需要很好地显示原始百分比。

原始PHP解决方案是

function getStringPercentages(inputs, needles) {
    $outputs = [];
    foreach ($inputs as $input) {
        $count = 0;
        foreach ($needles as $needle) {
            if (strpos($input, $needle) !== false) $count++;
        }
        $outputs[$input] = ($count / count($outputs)) * 100;
    }
}

然后您需要很好地显示原始百分比。

另一种方法是使用php的内置函数计算差异,然后从计数中减去差异并计算百分比

你可以把它放在一行,但为了可读性,我把它分解成变量

注意:这需要PHP7.4^来执行。如果您的PHP版本不符合要求,请使用
function($x)use($words){return in_array($x,$words);}
替换缩写函数
fn()

function percentageSubStrings(array $inputs, array $needles): array
{
    $outputs = [];
        
    foreach($inputs as $input)
    {
        $words = explode(' ', $input);
        $difference = array_diff($words, array_filter($needles, fn($x) => in_array($x, $words)));
        $outputs[$input] = ((count($words) - count($difference)) / count($needles)) * 100;
    }
    
    return $outputs;
}

另一种方法是使用php的内置函数计算出差异,然后从计数中减去差异并计算百分比

你可以把它放在一行,但为了可读性,我把它分解成变量

注意:这需要PHP7.4^来执行。如果您的PHP版本不符合要求,请使用
function($x)use($words){return in_array($x,$words);}
替换缩写函数
fn()

function percentageSubStrings(array $inputs, array $needles): array
{
    $outputs = [];
        
    foreach($inputs as $input)
    {
        $words = explode(' ', $input);
        $difference = array_diff($words, array_filter($needles, fn($x) => in_array($x, $words)));
        $outputs[$input] = ((count($words) - count($difference)) / count($needles)) * 100;
    }
    
    return $outputs;
}

看到它在紧凑的地方工作。

听起来不错,但你不需要告诉我们你计划做什么。你可以继续做下去,让我们知道你遇到了什么困难,这听起来不错,但你真的不需要让我们知道你打算做什么。您可以继续并告诉我们您遇到了什么困难,而不是嵌套的循环和计数器,您可以在
array\u filter()上使用
count()
append:
count(array\u filter($niels,fn($subStr)=>strpos($input,$subStr))/count($niels)*100
+1表示概念。@Jaquarh是的,这是另一种可能的解决方案。我选择这个是因为它包含了一个询问者可能理解的算法。但是,标准的PHP函数也可以工作。您可以在
array\u filter()上使用
count()
append:
count(array\u filter($niels,fn($subStr)=>strpos($input,$subStr))/count($niels)*100
+1表示概念。@Jaquarh是的,这是另一种可能的解决方案。我选择这个是因为它包含了一个询问者可能理解的算法。但是,标准PHP函数也可以正常工作。