数千の値を持つ単純な非連想配列があります。
値は1〜10語の文字列です。
配列内で最も「ヒット」が多い3〜4個の連続する単語文字列を見つける必要があります。
これは英数字であり、大文字と小文字は区別されません。
ヒットは次のようになります。
文字列の任意の1つの単語は、配列の項目内にあります。複数の連続する単語のセットは、配列の項目内で発生します。
だから、例:
$database = array(
0 => 'the dogs whisperer',
1 => 'I am a whisperer',
2 => 'dogs are often hairy',
3 => 'dogs',
4 => 'are you a dogs whisperer'
5 => 'dogs can be manipulated by a whisperer');
「犬のささやき」という3つの単語の文字列は、次のヒットを取得します。
「犬のささやき」の「犬のささやき」
「犬のささやき」の「犬のささやき」
「犬のささやき」の「犬」
「犬のささやき」の「the」
「犬のささやき」の「犬」
「犬のささやき」のささやき
「私はささやきです」の「ささやき」
「犬はしばしば毛深い」の「犬」
「犬」の「犬」
「あなたは犬のささやきですか」の「犬のささやき」
「あなたは犬のささやきですか」の「犬」
「あなたは犬のささやきですか」の「ささやき」
「犬はささやき声で操作できる」の「犬」
「犬はささやき声で操作できる」の「ささやき声」
複数の単語の文字列がヒットするためには、単語が連続している必要があります。つまり、「犬のささやき」は「犬はささやき声で操作できます」のヒットではありません。
言葉も整然としている必要があります。つまり、「dogs whisperer」は、「whispererdogs」という値のヒットではありません。
さまざまな配列関数をよく理解していますが、すべてをまとめることはできません。単語ごとに展開して再結合し、strpos!== FALSEを使用してヒットを探すことにより、可能なすべての文字列セットを抽出しようとしました。必要な出力を取得できない巨大な行列になってしまいます。