quand Christopher Johnson McCandless
est mappé sur {1}{2}
:
combinaison possible pour former deux groupes est :
Christopher Johnson
etMcCandless
Christopher
etJohnson McCandless
quand cinema tomorrow at night
est mappé sur {3}{4}
combinaison possible pour former deux groupes est :
cinema
ettomorrow at night
cinema tomorrow
etat night
cinema tomorrow at
etnight
Écrivez une fonction PHP dans get_possible_groups($string_of_words, $group_count)
renvoie tableau de tableau de combinaisons de groupes.
et une instruction SQL comme :
SELECT count(*), 'cinema' firstWordGroup, 'tomorrow at night' secondWordGroup
FROM possibleMatchTable
WHERE possible_match IN ('cinema', 'tomorrow at night')
UNION
SELECT count(*), 'cinema tomorrow', 'at night'
FROM possibleMatchTable
WHERE possible_match IN ('cinema tomorrow', 'at night')
UNION
SELECT count(*), 'cinema tomorrow at', 'night'
FROM possibleMatchTable
WHERE possible_match IN ('cinema tomorrow at', 'night');
une sortie possible peut être :
+----------+--------------------+-------------------+
| count(*) | firstWordGroup | secondWordGroup |
+----------+--------------------+-------------------+
| 2 | cinema | tomorrow at night |
| 0 | cinema tomorrow | at night |
| 0 | cinema tomorrow at | night |
+----------+--------------------+-------------------+
selon celui qui compte 2 (groupes de deux mots), c'est votre réponse.
Si MODEL
le texte est un fulltext
colonne indexée, alors pour toute chaîne aléatoire donnée, vous pouvez obtenir le modèle le plus pertinent comme :
SELECT * FROM model_strings
WHERE MATCH(model) AGAINST ('Damn you Spar, Kot will kill you.');
la requête peut vous renvoyer quelque chose comme :
+----------------------------------+
| model |
+----------------------------------+
| Damn you {1}, {2} will kill you. |
+----------------------------------+
Extraire les mots d'une chaîne aléatoire à l'aide d'espaces réservés de Model
:
<?php
$placeholder_pRegEx = '#\{\d+\}#';
$model = 'Damn you {1}, {2} will kill you. {3}{4}{5}';
$string = 'Damn you Spar, Will will kill you. I Love it man.';
$model_words = explode(' ', $model);
$string_words = explode(' ', $string);
$placeholder_words = array();
for ($idx =0, $jdx=0; $idx < count($string_words); $idx ++) {
if ($jdx < count($model_words)) {
if (strcmp($string_words[$idx], $model_words[$jdx])) {
$placeholder_words[] = $string_words[$idx];
//Move to next word in Model only if it's a placeholder
if (preg_match($placeholder_pRegEx, $model_words[$jdx]))
$jdx++;
} else
$jdx++; //they match so move to next word
} else
$placeholder_words[] = $string_words[$idx];
}
//Even status will have the count
$status = preg_match_all ($placeholder_pRegEx, $model, $placeholders);
$group_count = count($placeholders[0]);
var_dump(get_defined_vars());
?>
Le code ci-dessus vous donnera des valeurs comme :
'placeholder_words' => array (size=6)
0 => string 'Spar,' (length=5)
1 => string 'Will' (length=4)
2 => string 'I' (length=1)
3 => string 'Love' (length=4)
4 => string 'it' (length=2)
5 => string 'man.' (length=4)
'placeholders' => array (size=1)
0 =>
array (size=5)
0 => string '{1}' (length=3)
1 => string '{2}' (length=3)
2 => string '{3}' (length=3)
3 => string '{4}' (length=3)
4 => string '{5}' (length=3)
'group_count' => int 5
- à partir de là, vous pouvez appeler
get possible groupings
- puis une requête SQL pour vérifier les correspondances possibles autorisées
- mots réels dans les groupes requis.
Hélas, c'est une question, hein !