|
|
|
|
[PHP] verifier une chaine de caractere
Dernière réponse le 12 jui 2007 à 10:38:13 antic80, le 31 mai 2006 à 21:50:25Bonjour
voila j'ai une feuille en php qui recupere la valeur d'une zone texte et qui la compare a une valeur situé dans une base MySQL
si la reponse est (x-3)(x+3) et que la valeur de la zone est (x-3)(x+3) ca va
mais si d'un coté j'ai (x-3)(x+3) et de l'autre (x+3)(x-3) ca ne marche pas
j'aimerai savoir si il existe une fonction qui permettrais de verifié la réponse comme je le souhaite
Ben c'est juste une comparaison de chaîne de caractère, non ?
|
Meme si l'ordre différe ??
|
Désolé pour le nouveau problème, ouvre un autre post, car je ne sais pas y répondre (à la base je ne fais pas de PHP ou de SQL :p)
|
Personnelement, d'abord je transformerais l'expression ")(" en ") (", sachant que pour ça il faut d'abord tranformer les espaces inutiles. Puis je séparerais les deux facteurs en fonction de l'espace qui se situe entre les deux pour mettre ces facteurs dans un tableau. A la fin on aurais ça:
$resultat=array('(x+3)', '(x-3)' );
Donc ça donnerais: $reponse=str_replace (' ', '', $reponse);
$reponse=str_replace (')(', ' ', $reponse);
$reponse=explode (' ', $response);
//On vérifie qu'on a que deux expressions entre parenthèses
if (sizeof ($response) == 2){
//on vérifie qu'on a nos deux expressions dans le tableau $response
if (array_in('(x+3)', $reponse) && array_in('(x-3)', $response) ){
//Arrivé ici: la réponse est bonne
}
}
Voilà. |
Note que j'ai fait une faute au dessus. remplacer la ligne:
$reponse=str_replace (')(', ' ', $reponse);
Par: $reponse=str_replace (')(', ') (', $reponse);
Et j'ai aussi mis des $response à la place de $reponse parfois.... Et ce n'est pas array_in mais in_array (grrr....) Sinon à vrai dire c'est plus compliqué que ça, il faut prévoir que le produit peut être exprimé avec le signe * ou encore que les termes à l'intérieur des facteurs sont inversés (pire encore: cette inversion ne peut marcher que si un facteur est une addition....). Alors ettoffons tout ça:
$reponse=str_replace (' ', '', $reponse);
//Au cas où le produit utilise *
$reponse=str_replace('*', '', $reponse);
$reponse=str_replace (')(', ') ( ', $reponse);
$reponse=explode (' ', $response);
//On vérifie qu'on a que deux expressions dans notre tableau (nos deux facteurs)
if (sizeof ($reponse) == 2){
/*on vérifie qu'on a nos deux expressions dans le tableau
$response et on prvoit aussi une inversion des termes en cas
d'addition */
if ( (in_array('(x+3)', $reponse) || in_array('(3+x)', $reponse) ) && in_array('(x-3)', $reponse) ){
//Arrivé ici: la réponse est bonne
}
}
Et je parie qu'il y a encore des imprevus qu'on a pas prévus :-) |
Ola j'ai un peu du mal a tout comprendre
|
En fait je supprime d'abord tous les espaces.
$reponse=str_replace (')(', ') ( ', $reponse);
je remplace toutes les expressions )( par ) ( c'est à dire que je rajoute un espace entre chaque expressions de parenthèses. '(x-3)(x+3)' deviendra donc '(x-3) (x+3)' On sait maintenant qu'il n'existe un espace que entre chaque expression encerclée de parenthèses. Chaque facteur est séparé par un espace. On peut donc utiliser l'espace comme séparateur de chaque facteur. explode permet de découper une chaine dans un tableau, en utilisant comme séparateur ce qu'on veut. Donc en faisant $reponse=explode (' ', $response) $reponse sera ensuite un tableau comme ceci: array( '(x-3)', '(x+3)' ) N'empêche que ça pose des problèmes si tu as des centaines de questions. Dés lors qu'il y aura des réponses avec des parenthèses dans des parenthèses, ça va poser problème. |
Idée : Faire le calcul en remplaçant les valeur de x, y ou z par un entier ! , Comparer le résultat de l'opération avec celui de la base !
|

