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