2010-12-14 37 views
0

Je travaille sur un projet où tous les membres et leurs informations sont stockées dans un fichier JSON. Je suis en train de créer un formulaire de recherche et j'ai besoin d'aide pour parcourir les membres et vérifier s'il y a une correspondance exacte ou une correspondance similaire.Comment faire une recherche parmi les valeurs de formulaire POSTed en utilisant regex et retourner les résultats

Les membres sont stockés dans une variable SESSION:

$_SESSION['members'] = json_decode($jsonFile); 

mais je suis incertain comment utiliser regex pour vérifier les correspondances qui sont similaires (et pas seulement exact). Par exemple, si le nom d'un membre est "Jonathan", je souhaite que ce résultat soit renvoyé même si l'utilisateur recherche "Jon". Est-ce que regex est la bonne approche? Toute aide sera grandement appréciée - merci!

-Manoj

Répondre

0

Je pense que je serais en utilisant une base de données pour stocker les données plutôt que JSON afin que vous puissiez utiliser la Recherches LIKE, par exemple

SELECT * FROM users WHERE name LIKE 'Jon%' 

Si vous devez absolument utiliser JSON vous boucle pourrait par tous les membres et utiliser une expression rationnelle comme

preg_match('/^'.$term.'.*/i', $element, $matches); 

de les vérifier tous.

+0

Salut Paul, ouais je suis coincé à travailler avec le fichier JSON - dont le contenu est sauvegardé dans un tableau. Merci pour l'expression rationnelle - cela va faire quelque chose de similaire à l'opérateur SQL "LIKE"? –

+0

Ce que j'ai écrit là-bas fonctionnerait de la même manière que l'exemple LIKE. Bien sûr, ils ne doivent pas commencer au début, LIKE '% Jon%' correspondrait au mot 'jon' n'importe où dans le champ. L'équge regexp pourrait être quelque chose comme: '/.*'.$term.'.*/i'. À quoi ressemble exactement le tableau et sur quels champs souhaitez-vous effectuer une recherche? preg_grep() est idéal si c'est tous ... –

+0

Le tableau est assez simple. Chaque membre a un nom, une ville et un numéro et le formulaire de recherche aurait des champs de saisie pour le nom, la ville et le numéro. Et oui, je les chercherais tous sur la base de votre suggestion, je pense que je vais aller avec preg_grep(). J'ajouterai plus de champs pour chaque membre dans le futur, mais pour le moment c'est ce que j'ai. –

0

Si le $jsonFile contenu est un tableau de quelque sorte, vous trouverez peut-être preg_grep() d'utilisation, mais il ne fonctionne pas sur les tableaux multidimensionnels. Vous pourriez avoir devoir boucler sur chaque enregistrement de membre individuel et grep les domaines pertinents vous, quelque chose comme:

foreach ($_SESSION['members'] as $idx => $member) { 
    ... match relevant fields... 
} 
+0

Merci, Marc. preg_grep() est ce que je vais devoir utiliser pour vérifier des correspondances similaires et pas seulement exactes? –

+0

Tout dépend de la configuration du motif regex. Cela ne vous aidera pas à faire correspondre la couleur et la couleur, à moins que vous n'écriviez spécifiquement le motif pour cela. Si vous voulez vraiment des correspondances de type "sons semblables", vous devrez étudier d'autres choses, comme la fonction 'soundex()' (http://php.net/soundex) –