Phénol Posté 2 Mars 2007 Posté 2 Mars 2007 Bonjour, J'ai un fichier TXT à importer, ou le premier "champs" est le nom complet des personnes : Exemple : DUPONT Marc DE LA FONTAINE Jean Etc. Je voudrais séprarer le nom du prénom, le problème est que je ne peux pas utiliser un list($nom, $prenom) = split(" ", $nom_complet); car le nom de famille peut être composé d'espaces... Comment ne considérer QUE le dernier espace par exemple ? Comment couper le nom du prénom dans mon cas ? Merci par avance pour votre aide ! P.S. : A aucun moment les prénom ne sont composés d'espaces !
Sarc Posté 2 Mars 2007 Posté 2 Mars 2007 Salut Voilà : $chaine = "DE LA FONTAINE Jean";$tableau = explode(' ', $chaine, -1);$prenom = $tableau[1];$nom = $tableau[0]; Voir la fonction explode qui accepte une limite en troisième argument à partir de PHP 5.01.
georges Posté 2 Mars 2007 Posté 2 Mars 2007 (modifié) oui, mais on peut ne pas avoir PHP5 d'activé ou + simplement travailler sous php4 // PHP4$chaine = "DE LA FONTAINE Jean";$tableau = explode(' ', $chaine);echo $tableau[count($tableau)-1]; sauf que là, cela ne retourne QUE le prénom Modifié 2 Mars 2007 par georges
Sarc Posté 2 Mars 2007 Posté 2 Mars 2007 Si pas PHP5, suffit d'inverser la chaîne, et de prendre le premier.. Puis de réinverser pour obtenir tout à l'endroit. $chaine = "DE LA FONTAINE Jean";$tableau = explode(' ', strrev($chaine), 1);$prenom = strrev($tableau[0]);$nom = strrev($tableau[1]);
georges Posté 2 Mars 2007 Posté 2 Mars 2007 (modifié) avec explode je suis arrivé avec : $chaine = "DE LA FONTAINE Jean";$combien = explode(' ', $chaine);for ($i=0;$i<count($combien)-1;$i++){$nom.=" ".$combien[$i];}$prenom=$combien[count($combien)-1];echo $nom,' ',$prenom; par contre avec le code que tu donnes avec strrev(), y a une erreur de d'offset de tableau.. mais va falloir que j'installe PHP5 un de ces quatre matins on peut sur le même ordinateur installer les 2 versions de PHP4 et PHP5 ? (je sais par ailleurs que l'on ne peut pas installer à la fois par exemple 1.6 et 1.8) ? edit : tu auras compris que je parle de easyphp ;o) Modifié 2 Mars 2007 par georges
TheRec Posté 2 Mars 2007 Posté 2 Mars 2007 Bonsoir, Une autre possibilité est de tirer avantage des expression régulières... preg_match_all('/(.+) (.+)/i',$nom_complet,$matches); Ensuite dans le tableau $matches tu trouvera dans l'ordre : $matches[0] -> Nom complet$matches[1] -> Nom de famille $matches[2] -> Prénom Le premier sous-masque signifie toutes suites de caractères quelconques ".+" (espaces compris) jusqu'à un espace (jusqu'à ce point l'expression n'est pas déterminante), ensuite le deuxième sous-masque est suivi de "$" qui indique la fin de la chaîne... Donc seul la dernière suite de caractères quelconques précédée d'un espace lui correspond. Il subsiste un problème, si le prénom est composé avec un espace tu n'obtiendra que la dernière partie de ce prénom... par exemple deux prénoms, mais si ce cas n'apparaît pas dans ta liste cette expression rationnelle devrait te contenter. (Comme certain code précédents, je propose juste cette solution car elle te permet somme toute plus de flexibilité si la nature de tes données devait évoluer). Bonne continuation. P.S. : Pour PHP4 et PHP5 sur le même ordinateur, sous Windows, tu peux utiliser WAMP qui est également une solution qui intègre Apache, MySQL, PHP et qui offre un "plugin" pour PHP4 (car PHP5 est la version par défaut) et le changement se fait en un seul clic... toutefois les deux versions ne peuvent pas fonctionner en même temps avec cette solution. Je ne crois pas que EasyPHP permet ceci non plus, mais cela fait un moment que je n'ai plus utilisé cette application.
Sarc Posté 2 Mars 2007 Posté 2 Mars 2007 Ah oui, je pensais que le "int" était la clef maximale du tableau retourné... Si c'est le nombre de valeurs différentes, il faut mettre 2 au lieu de 1, donc : $chaine = "DE LA FONTAINE Jean";$tableau = explode(' ', strrev($chaine), 2);$prenom = strrev($tableau[0]);$nom = strrev($tableau[1]); $chaine = "DE LA FONTAINE Jean";$tableau = explode(' ', $chaine, -2);$prenom = $tableau[1];$nom = $tableau[0]; Essaye avec ça..
georges Posté 2 Mars 2007 Posté 2 Mars 2007 bon, là je crois bien qu'il a le choix maintenant Merci TheRec pour WAMP : sais-tu si l'on peut faire cotoyer WAMP et esayphp ? histoire de tester et de supprimer l'un ou l'autre après essai ?
TheRec Posté 2 Mars 2007 Posté 2 Mars 2007 À mon avis la seule limitation que tu auras c'est que tu ne peux pas avoir plusieurs application qui utilisent le même port... en l'occurrence tes serveurs HTTP (celui de EasyPHP et celui de WAMP) ne devront pas utiliser le même port TCP (par défaut c'est le port 80 pour HTTP). Il suffit de spécifier deux ports différents dans les deux fichiers httpd.conf, cherche cette ligne : Port 80 Et spécifie des ports différents... attention de ne pas choisir des ports utilise par d'autres applications (serveur FTP, MySQL, etc.) ensuite lorsque tu accèdes au serveurs avec ton navigateurs utilise le port adéquat : -http://localhost:<port spécifié dans httpd.conf> P.S. : Pour plaider la cause de ma solution en PHP, elle ne tient qu'en une ligne également et est compatible avec PHP4 et PHP5
georges Posté 2 Mars 2007 Posté 2 Mars 2007 Merci beaucoup pour ces précieuses infos Pour ta "cause", je suis parfaitement d'accord
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant