如何发现一个字符串是否有多个短语,但顺序不同,不能有更多或更少的短语,并且之间可以有空格



例如,我有一个以下字符串

$a = "crt d a e f b";
$b = "b e a d c f";
$c = "a b c d g e";
$d = "a b c";
$e = "abcdef";
$f = "a b c d e r f t";
$g = "aabc d e f";

我只想找到我的字符串是否有"a"、"b"、"c"、"d"、"e"、"f"、"r"、"t",其中字符串不能有指定字符串以外的任何内容,并且字符串中必须有所有指定字符串。可以用空格分隔。

也许像compare($a, [ "a", "b", "c", "d", "e", "f", "r", "t" ];这样的东西应该给我如下的输出。

$map = [ "a", "b", "c", "d", "e", "f", "r", "t" ];;
compare($a, $map); // false
compare($b, $map); // false
compare($c, $map); // false
compare($d, $map); // false
compare($e, $map); // false
compare($f, $map); // true
compare($g, $map); // false

有人能帮我解决这个问题吗?

也许您可以用字符串创建一个数组,对它们进行排序和比较。

$a = "crt d a e f b";
$b = "b e a d c f";
$c = "a b c d g e";
$d = "a b c";
$e = "abcdef";
$f = "a b c d e r f t";
$g = "aabc d e f";
$base = [ "a", "b", "c", "d", "e", "f", "r", "t" ];
var_dump(compare($a, $base)); //false
var_dump(compare($b, $base)); //false
var_dump(compare($c, $base)); //false
var_dump(compare($d, $base)); //false
var_dump(compare($e, $base)); //false
var_dump(compare($f, $base)); //true
var_dump(compare($g, $base)); //false
function compare($a, $map) {
$stringParts = explode(' ', $a);
sort($stringParts);
sort($map);
return $stringParts === $map;
}
<?php
$a = "c d a e f b";
$b = "b e a d c f";
$c = "a b c d g e";
$d = "a b c";
$e = "abcdef";
$f = "a b c d e f g";
$g = "aabc d e f";
$array=[ "a", "b", "c", "d", "e", "f" ];
$length=strlen(str_replace(' ','',$e));

$flag=0;
foreach($array as $data){
if (strpos($e, $data) !== false) {
$flag=$flag+1;
}
}
if($flag<>$length){
echo "problem";
}
else{
echo "working";
}

以下是您所要求的示例代码。如果您更改此处的字符串$length=strlen(str_replace(' ','',$e));

在这里

if (strpos($e, $data) !== false) {

你将自己检查它是否工作。我建议您将这些字符串放入一个数组中,并对其进行更动态的解析,但这取决于您和您的输入。

最新更新