Problème strpos

Loulibalou
Invité n'ayant pas de compte PHPfrance

17 juin 2008, 16:35

Bonjour à tous,

Je vous explique en quelques mots ce que je souhaite faire.

Une page php où il apparait une champ texte. Dans ce champ texte, j'y insères des données du type :
- Florien Homme 18ans
- Elodie Femme 20 ans
... etc
Ensuite j'envoi à l'aide de la méthode post les données à récupérer. Jusqu'à là pas de soucis !

Maintenant, ce que je souhaiterais faire, c'est un script qui me tri automatiquement mes données. Je m'explique :

Imaginons, les données sont les suivantes :
- Florien Homme 18ans
- Elodie Femme 20 ans
Et bien je souhaiterais que les données récupérées soient triées.

Pour cela j'ai utilisé la fonction explode dans un premier temps pour délimiter les chaines de caractères grâce au tiret.

Code : Tout sélectionner

$tri = explode ("-", $données);
Si j'exécute une boucle while avec un simple echo du style :

Code : Tout sélectionner

$boucle=0; while ( $boucle < count($tri) ) { echo $tri[$boucle]; $boucle++; }
Pas de soucis les données s'affiche bien de la façon suivante :
- Florien Homme 18ans
- Elodie Femme 20 ans
Ce que je souhaiterais, c'est que ces données s'affiche de cette façon :
Homme :
- Florien Homme 18ans
Femme :
- Elodie Femme 20 ans
En clair, qu'à partir du moment où il detecte le mot Homme ou Femme dans une chaîne de caractères, qu'il me le mette en dessous d'homme ou de femme.

J'ai essayé la méthode suivante :

Code : Tout sélectionner

$boucle=0; while ($boucle < count($tri) && ( $trip2 = strpos($tri, "Homme") ) == false ) { echo "".$tri[$boucle]."<br>"; $boucle++; }
Le problème, c'est qu'à chaque fois, ca m'affiche toutes les données et pas seulement les hommes.

Merci de votre aide. :)

Mammouth du PHP | 1668 Messages

17 juin 2008, 17:37

Tu crée 2 tableaux, un homme, l'autre femme
tu explore ton tableau générale et tu te sert de preg_match(), si c'est un homme, il le place dans homme, si c'est un femme elle la place dans femme, puis deux boucles une pour lister le tableau femme, l'autre pour lister le tableau homme :lol:
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

ViPHP
AB
ViPHP | 5818 Messages

17 juin 2008, 18:13

Si c'est uniquement pour l'affichage tu peux faire un truc trivial comme ça :
$tri = explode ("-", $données);//tri des lignes

foreach($tri as $ligne)
{
$ligne = trim($ligne);
$titre = null;
if (stripos($ligne,'homme') !== false) $titre = 'Homme :<br/>'; 
else if (stripos($ligne,'femme') !== false) $titre = 'Femme : <br />';
if (isset($titre)) echo $titre.'-'.$ligne.'<br />'; else echo $ligne.'<br />';
}

Loulibalou
Invité n'ayant pas de compte PHPfrance

19 juin 2008, 22:33

Merci AB !

Dernière question, le résultat obtenu est bien le suivant :
Homme :
- Florien Homme 18ans
Femme :
- Elodie Femme 20 ans
Comment faire en sorte que lorsque les données insérées sont :
Florien Homme 18ans Ville Hobbies
Elodie Femme 20 ans Ville Hobbies
Les informations après le sexe de la personne soient effacées automatiquement lors de l'affichage ?

Ce qui donnerait comme résultat :
Homme :
- Florien Homme
Femme :
- Elodie Femme
Merci.

ViPHP
AB
ViPHP | 5818 Messages

19 juin 2008, 23:18

Es-tu certain qu'il soit nécessaire d'afficher homme ou femme alors que le titre le précise ? Est-ce que l'affichage suivant ne serait pas suffisant ?
Homme :
- Florien
Femme :
- Elodie
Ce qui donnerait
$tri = explode ("-", $données);//tri des lignes

foreach($tri as $ligne)
{
$ligne = trim($ligne);

$mots = explode(' ',$ligne);

$titre = null;

if (stripos($ligne,'homme') !== false) $titre = 'Homme :<br/>'; 
else if (stripos($ligne,'femme') !== false) $titre = 'Femme : <br />';

if (isset($titre,$mots[0])) echo $titre.'-'.$mots[0].'<br />'; else echo $ligne.'<br />';
} 
Pour avoir les deux premiers mots de ta ligne il faudrait faire
if (isset($titre,$mots[0],$mots[1])) echo $titre.'-'.$mots[0].' '.$mots[1].'<br />'; else echo $ligne.'<br />';
Mais ce dernier code ne fonctionnera correctement que s'il n'y a qu'un seul espace entre le premier mot et le second. Autrement il faudrait faire quelques aménagements pour vérification

Loulibalou
Invité n'ayant pas de compte PHPfrance

20 juin 2008, 10:36

Es-tu certain qu'il soit nécessaire d'afficher homme ou femme alors que le titre le précise ? Est-ce que l'affichage suivant ne serait pas suffisant ?
Oui !

Merci ! :)