Rechercher une chaîne de caractères ou une partie de chaîne de caractères en PHP
Je suis en train de faire un petit magasin en ligne d'applications en PHP. J'ai donc un tableau de cartes en PHP. Je recherche une chaîne de caractères (un produit) dans le tableau. J'ai regardé array_search en PHP et il semble que cela ne regarde que pour une correspondance exacte. Savez-vous une meilleure façon de faire de cette fonctionnalité? Depuis ce est une très petite partie de ce que je suis en train de faire, j'espérais qu'il y avait quelque chose de construit dans. Des idées?
Merci!
EDIT: Le tableau contient des "produits" dans ce format:
[6] => SimpleXMLElement Object
(
[@attributes] => Array
(
[id] => 2000-YM
)
[Name] => Team Swim School T-Shirt
[size] => YM
[price] => 15
[group] => Team Clothing
[id] => 2000-YM
)
[7] => SimpleXMLElement Object
(
[@attributes] => Array
(
[id] => 3000-YS
)
[Name] => Youth Track Jacket
[size] => YS
[price] => 55
[group] => Team Clothing
[id] => 3000-YS
)
Donc, je me demandais ce que je peux faire une recherche comme "Équipe" et il serait de retour moi le premier élément vu ici. Je suis de baser la recherche sur le Nom (encore une fois c'est juste un petit quelque chose). Je comprends que je peux trouver de la chaîne exacte, je suis juste coincé sur les "meilleurs résultats" si il ne peut pas trouver le point exact. L'efficacité est sympa, mais pas nécessaire, puisque je n'ai que environ 50 articles de sorte que même si j'utilise un "ralentissement" de l'algorithme, il ne prendra pas beaucoup de temps.
OriginalL'auteur Sahir | 2011-04-21
Vous devez vous connecter pour publier un commentaire.
array_filter
vous permet de spécifier une fonction personnalisée pour faire de la recherche. Dans votre cas, une fonction simple qui utilisestrpos()
pour vérifier si votre chaîne de recherche est présent:Sinon, vous pouvez utiliser une fonction anonyme pour aider à prévenir la contamination de l'espace de noms:
$needle
est un caractère unique comme dans mon cas, vous aurez envie de faire un contrôle strict dans le cas où la position de l'index est 0 (vsfalse
si aucune correspondance n'est trouvée):return(strpos($haystack, $needle) !== false);
Je suis à essayer de comprendre où l' $haystack variable montrer, c'est que la clé dans le tableau?
OriginalL'auteur Marc B
ou vous pouvez utiliser preg_match pour plus de flexibilité de recherche au lieu de strpos.
OriginalL'auteur Headshota
Malheureusement, la recherche est l'une des choses les plus difficiles à faire dans l'informatique. Si vous construisez pour une recherche basée sur la chaîne littérale des allumettes ou des expressions régulières (regex), vous pouvez trouver que vous serez malheureux à la pertinence des résultats retournés.
Si vous êtes intéressé à retrousser vos manches et d'obtenir un peu sale avec une solution plus élaborée, je vais essayer de Zend Lucene mise en œuvre ( http://framework.zend.com/manual/en/zend.search.lucene.html ). J'ai mis en place une recherche sur un site. Il a fallu quelques jours, mais les résultats ont été BEAUCOUP mieux que les 15 minutes de la solution de chaîne littérale correspondant.
Laissez-moi savoir si vous voulez plus d'infos.
Bonne chance!
PS. Voici un exemple: http://devzone.zend.com/article/91
OriginalL'auteur Homer6
Je pense que Marc B réponse a été un bon point de départ, mais pour moi, il a eu quelques problèmes. Comme vous devez savoir ce que l'Aiguille est au "moment de la compilation" parce que vous ne pouvez pas modifier dynamiquement cette valeur. aussi, si l'aiguille est apparu au début de l'élément de chaîne, il agirait comme il est pas là du tout. ainsi, après un peu d'expérimentation j'ai réussi à venir avec un moyen de contourner ces deux problèmes. si vous n'avez pas à créer une nouvelle fonction pour chaque aiguille vous allez voulez plus.
et il serait appelé comme ceci:
et d'être à l'aiguille est maintenant accessible dans le même champ d'application que le reste du code est que vous pouvez réglez l'aiguille de toute autre variable de chaîne que vous voulez, y compris la saisie de l'utilisateur.
OriginalL'auteur Kit Ramos
Vous pouvez utiliser des expressions régulières sur chaque élément du tableau comme
OriginalL'auteur ufucuk
parcourir le tableau et utiliser substr si vous voulez les correspondances partielles:
http://php.net/manual/en/function.substr.php
cela devrait être suffisant si vous avez un "petit" magasin...
substr()
comme le nom l'indique, est utilisé pour obtenir la sous-chaîne. Comment est-ce que de l'aide ici? Pourriez-vous démontrer par un exemple?OriginalL'auteur sdolgy
J'ai le même Problème mais j'ai créé, j'ai la fonction de recherche dans la gamme en passant par le tableau, une clé et une valeur.
OriginalL'auteur Omkar