Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/06/2008, 22h18   #1
Futur Membre du Club
 
Inscription : juin 2008
Messages : 45
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 45
Points : 15
Points : 15
Par défaut retrouver un élément dans une chaine de caractères

bonsoir
je cherche à savoir si un élément au moins , parmi plusieurs , est contenu dans une chaine de caractères .(programation en php)

exemple
$chaine = "bateau oiseau vélo voiture camion roue andouille de vire 28.2 A914 ......... "

et je voudrais savoir si cette chaine contient "vélo" ou "roue" ou "langue de boeuf sauce ravigotte" ou "14"

merci
mauyebo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2008, 01h25   #2
Membre chevronné
 
Inscription : avril 2007
Messages : 764
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 764
Points : 769
Points : 769
Regarde une des fonctions du genre de substr_count...


- cette question avait plutôt sa place sur un forum PHP (la preuve, nous y sommes désormais !)
- comment tester la présence de sous-chaîne dans une chaîne, ça se trouve avec une petite recherche google ou autre (c'est d'ailleurs ce que j'ai fait)
Astartee est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2008, 09h17   #3
Futur Membre du Club
 
Inscription : juin 2008
Messages : 45
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 45
Points : 15
Points : 15
bonjour

Je n'ai pas trouvé dans substr_count la réponse à mon problème. Mais peut etre n'ai je pas compris la réponse dans le manuel php.

merci
mauyebo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2008, 13h48   #4
Membre chevronné
 
Inscription : avril 2007
Messages : 764
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 764
Points : 769
Points : 769
Cette fonction est pourtant clairement expliquée...
Citation:
int substr_count ( string $haystack , string $needle [, int $offset [, int $length ]] )
substr_count() retourne le nombre d'occurrences de needle dans la chaîne haystack . Notez que needle est sensible à la casse.
donc si le résultat de substr_count($chaine, "vélo") est strictement supérieur à zéro c'est que $chaine contient "vélo"...

Test de présence d'une sous-chaîne dans une chaîne : c'est fait.
Test de présence d'une sous-chaîne parmi plusieurs dans une chaîne : tu n'as plus qu'à boucler...
(si tu voulais une fonction qui fasse tout d'un coup, je doute que ça existe dans les librairies standards)
Astartee est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2008, 16h01   #5
Futur Membre du Club
 
Inscription : juin 2008
Messages : 45
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 45
Points : 15
Points : 15
Par défaut suite recherche

bonjour

je cherchais plutôt une fonction qui fasse tout d'un coup car j'ai environ 80 éléments différents à rechercher dans des chaines et j'aurais préféré quelque chose de plus ergonomique qu'une boucle ou qu'une série de recherche . Mais s'il n'y a pas d'autre possibilité .... j'avais bien compris la fonction de substr mais ne pensais pas qu'elle était ma seule issue ..

merci
mauyebo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2008, 16h54   #6
Rédacteur/Modérateur
 
Avatar de N1bus
 
Inscription : janvier 2003
Messages : 2 018
Détails du profil
Informations personnelles :
Âge : 47
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : janvier 2003
Messages : 2 018
Points : 1 992
Points : 1 992
Hey Mau

Utilise les tableaux comme dans l'exemple ci-dessous avec la fonction in_array() :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 
<?php
//ici on définit des tableaux de tailles 
$Tab_lp     = array("80a", "85a", "85b", "85c", "90b", "90c"); // etc...
$Tab_cul    = array("36", "38", "40", "42") ;//etc
$Tab_chauss = array("36", "36.5", "37", "37.5"); // etc (voir 36.5 ou 365 ????)
 
//ensuite on interroge la base
$q_art = "SELECT  * FROM $T_Article";
$r_art = mysql_query($q_art) or die(mysql_error());
 
$row_art = mysql_fetch_assoc($q_art);
 
   $LesTailles   = $row_art['taille'];
   $LesQuantites = $row_art['quantite'];
 
   $Tab_Tailles   = explode(";", $LesTailles);
   $Tab_Quantites = explode(";", $LesQuantites);
 
  for($i = 0; $i < count($Tab_Tailles); $i++){
 
       if(in_array($Tab_Tailles[$i], $Tab_lp)){
      // c'est un LP   
   // pour récupérer la quantité
   $q[$i] = $Tab_Quantites[$i];
 
   //le reste du code ici
    }
 
    if(in_array($Tab_Tailles[$i], $Tab_cul)){
      // c'est une culotte  
   // pour récupérer la quantité
   $q[$i] = $Tab_Quantites[$i];
 
   //le reste du code ici
    }
 
    if(in_array($Tab_Tailles[$i], $Tab_chauss)){
      // c'est une chaussure  
   // pour récupérer la quantité
   $q[$i] = $Tab_Quantites[$i];
 
   //le reste du code ici
    }
}
?>
Note :
Tu n'as pas besoin de savoir si tu as toutes les tailles : tu n'affiches que celles qui sont présentes.

Note 2 :
Tu pouvais également déterminer le type de l'article en lisant le champ "famille_article" et donc en déduire quel type d'affichage de taille tu devras utiliser (cqfd) - c'est plus facile également.
N1bus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2008, 17h33   #7
Futur Membre du Club
 
Inscription : juin 2008
Messages : 45
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 45
Points : 15
Points : 15
merci je m'y recole ...
je ne peux pas utiliser famille_article car body et mdb peuvent avoir aussi les tailles de lp ...
a +
mauyebo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2008, 17h44   #8
Rédacteur/Modérateur
 
Avatar de N1bus
 
Inscription : janvier 2003
Messages : 2 018
Détails du profil
Informations personnelles :
Âge : 47
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : janvier 2003
Messages : 2 018
Points : 1 992
Points : 1 992
Exact.

Ben dans tous les cas cela n'a pas d'importance vu que tu afficheras le meme tableau de tailles... que ce soit lp , body ou mdb .

Si tu veux pouvoir les différencier absolument, envisage alors de rajouter un champ explicite qui te donnera le type d'affichage des tailles. Il ne servira qu'à ça mais ça va te faciliter le boulot.

De meme que tu as le champ type_article qui n'est pas gérable vu qu'il est dynamique, tu peux rajouter le champ "type_taille" en ENUM (avec des check boxes dans le back-office pour tes différents affichages de tailles / tu peux avoir plusieurs types de tailles pour le même article)
N1bus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 01h01   #9
Membre chevronné
 
Inscription : avril 2007
Messages : 764
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 764
Points : 769
Points : 769
Alors là, je suis perdue...
(d'où ça sort ces )

Si j'ai bien compris, ce que tu proposes, N1bus, c'est de ranger les mots à chercher dans un tableau (=> {"vélo", "roue", "14"}), de "casser" la chaîne dans laquelle on va les chercher dans un autre tableau ($chaîne devient {"bateau", "oiseau", "vélo", "voiture", "camion", ...}), puis de chercher si l'un des mots du premier tableau se trouve dans le second...
Ce qui ne répond en fait pas au problème posé : comment vas-tu tester si la chaîne entière "langue de boeuf sauce ravigotte" est présente dans $chaine ?
(après, ça suffira peut-être à mauyebo, mais dans ce cas c'est qu'il a demandé à faire plus de chose que ce dont il avait besoin )


Citation:
j'ai environ 80 éléments différents à rechercher dans des chaines et j'aurais préféré quelque chose de plus ergonomique qu'une boucle ou qu'une série de recherche
Je ne pense pas qu'algorithmiquement parlant on puisse vraiment faire mieux que de chercher tout à tour si l'un des 80 éléments est présent dans l'une des différentes chaînes à tester. Je peux me tromper... mais je ne pense vraiment pas que ça soit possible facilement.
Quand tu parles d'ergonomie, tu parles peut-être de la "gueule" de ton code ? Eh bien tu écris les fonctions dont tu as besoin avec les arguments qui te conviennent le mieux, et ensuite tu les appelle à loisir !
Pour revenir à la demande initiale, c'est-à-dire "savoir si un élément au moins , parmi plusieurs , est contenu dans une chaine de caractères" : en dix lignes tu peux écrire une fonction "atLeastOneSubstr($tableau_elements, $chaine_a_tester)" qui teste si au moins un des éléments contenu dans le premier argument (un tableau de chaînes de caractère) est contenu dans le deuxième argument (une chaîne de caractères).
Si ça ne te vas toujours pas, tu peux peut-être ré-expliquer ton problème.



Plus je relis les messages précédents et moins je comprends... D'où ça sort ces "body", "mdb" et "famille_article" ??? Pourtant mauyebo n'a bien que ces 4 messages à son actif, donc ça ne peut pas être la suite d'une discussion commencée ailleurs... Vous vous connaissez et donc vous savez tous les deux quel est le problème de fond, c'est ça ?
Astartee est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 01h44   #10
Rédacteur/Modérateur
 
Avatar de N1bus
 
Inscription : janvier 2003
Messages : 2 018
Détails du profil
Informations personnelles :
Âge : 47
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : janvier 2003
Messages : 2 018
Points : 1 992
Points : 1 992
Citation:
Alors là, je suis perdue...
(d'où ça sort ces )

Pas de panique

mauyebo est un ami et j'ai commencé son site avec lui . Maintenant il est en train de le terminer à la maison.

La réponse que je lui ai donné est probablement celle qui lui conviendra de mieux. je connais très bien la structure du site.

Quant au body mdb et lp :
C'est le site de son magasin de lingerie .

Effectivement la question n'était pas trop appropriée.
L'essentiel étant qu'il ait compris.
N1bus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2008, 01h51   #11
Membre chevronné
 
Inscription : avril 2007
Messages : 764
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 764
Points : 769
Points : 769
j'étais donc arrivée à la bonne conclusion, ça me rassure j'avais vraiment l'impression d'avoir raté un truc
Bon ben dans ce cas, tu sais certainement mieux que moi ce dont il a besoin, donc je vous laisse.
Astartee est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h06.


 
 
 
 
Partenaires

Hébergement Web