Bonjour,
Quelqu'un a une fonction qui permet de séparer dans une collonne MySQL un NOM et un Prénom ?
Je recherche la même chose ce expliquez sous ce post mais en PHP. (http://www.developpez.net/forums/sho...03&postcount=8)
Merci d'avance
Arnaud
Bonjour,
Quelqu'un a une fonction qui permet de séparer dans une collonne MySQL un NOM et un Prénom ?
Je recherche la même chose ce expliquez sous ce post mais en PHP. (http://www.developpez.net/forums/sho...03&postcount=8)
Merci d'avance
Arnaud
Je ne vois pas de fonction spécifiques pour faire ca, mais tu peux choisir un caractère spécial pour cette séparation comme l'* ou le / qui n'existent pas dans un nom ou un prénom (enfin je ne crois pas ).
Et lors de l'insertion tu fais une concaténation a la lecture tu utilises split!
moué non, je ne peux pas rajouter de | ou / entre les nom et prénom car les données me sont impossé sous cette forme.
Dans le lien donné, la macro fonctionne parfaitement, voila pourquoi j'aurai bien aimé trouvé la même chose en PHP...
Merci encore pour ton aide !
salut! si j'ai bien compris tu veux séparer le nom et le prénom stockés dans une colone sql
tu peux tout simplement faire un split de l'espace entre le nom et le prenom
$liste=split(' ',$ta_colone_NOM_PRENOM);
$liste[0] contiendra le nom,
$liste[1] contiendra le prénom.
Envoyé par arnaudperfect
C'est plus un travail pour les expressions régulières. Voilà pour l'idée :
Résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 <?php $noms = array( 'DUPONT DUPOND Charles Henri', 'DUPONT DUPOND Charles-Henri', 'DUPONT-DUPOND Charles-Henri', 'PIERROT Jean-Jaques', 'NOËL Robet', 'NOËL BAPTISTE Pierre', 'NOËL-BAPTISTE Pierre', ); function extraire_nom_prenom($string) { if (preg_match("#((?:\b[[:upper:]'\s-]+\b)+)\s+((?:\b[[:upper:]][[:lower:]'\s-]+\b)+)#", $string, $m)) { return array('nom' => $m[1], 'prenom' => $m[2]); } return FALSE; } header('Content-type: text/plain'); foreach ($noms as $n) { $res = extraire_nom_prenom($n); echo ($res ? print_r($res, TRUE) : 'KO') . PHP_EOL; } ?>
Array
(
[nom] => DUPONT DUPOND
[prenom] => Charles Henri
)
Array
(
[nom] => DUPONT DUPOND
[prenom] => Charles-Henri
)
Array
(
[nom] => DUPONT-DUPOND
[prenom] => Charles-Henri
)
Array
(
[nom] => PIERROT
[prenom] => Jean-Jaques
)
Array
(
[nom] => NOËL
[prenom] => Robet
)
Array
(
[nom] => NOËL BAPTISTE
[prenom] => Pierre
)
Array
(
[nom] => NOËL-BAPTISTE
[prenom] => Pierre
)
la j'avoue julp, tres fort...
ce serais déplacé de te demander de nous expliquer tout ca ? a oui encore une fois, j'aime beaucoup, compact et complet, tres php5 (enfin je crois), mérite de s'y attarder.
oui pas mal ! ca devrait être ajouter au source php... ezt avec une petite explication ca serai encore mieux... merci encore !
Ce n'est en rien spécifique à PHP 5. L'extension PCRE (fonctions preg_*) sont disponibles en PHP 4 comme en PHP 5.Envoyé par ascito
Je ne ferais pas mieux que le tutoriel existant : Initiation aux expressions régulières en PHP et je n'ai fait que suivre grosso-modo l'idée de base (cf le lien donné en début de sujet).Envoyé par arnaudperfect
C'est simple en fait on cherche deux parties dans la chaîne :
- Les noms, écrits entièrement en majuscules, partie : ((?:\b[[:upper:]'\s-]+\b)+)
\b : délimiteur de mots (représente un changement d'état entre un caractère qu'on ne trouve pas dans un mot : un signe de ponctuation, un blanc, ... et l'inverse : tout ce qui est une lettre par exemple).
[[:upper:]'\s-] : constitués de lettres majuscules ([:upper:]), d'apostrophes ('), d'espaces (\s) et de tirets (-)
Le premier + indique qu'un nom est constitué d'au moins l'un des caractères précédents
Le deuxième + dénote le fait que le nom peut être constitué de plusieurs mots en majuscules (au moins un).- Les prénoms, commençant par une lettre majuscule (on peut rendre ce critère facultatif en ajoutant un ? derrière le deuxième [[:upper:]]) puis entièrement en minuscules : ((?:\b[[:upper:]][[:lower:]'\s-]+\b)+)
Tout est strictement identique à la partie correspondant aux noms hormis le fait que [[:upper:]] dit que le prénom doit commencer par une majuscule et que [[:lower:]'\s-] fait en sorte que le restant du prénom soit constitué de minuscules, d'apostrophes, de blancs ou de tirets.
Pourquoi avoir autorisé les blancs (\s) dans le nom ou le prénom ? Tout simplement pour que les noms (ou prénoms) composés puissent être regroupés dans une seule et même capture.
Aucune fonction quelle qu'elle soit ne saura garantir un résultat valable à 100%, car dans une colonne "fourre-tout" contenant à la fois le nom et le prénom :
- le nom et le prénom peuvent être simples ou composés ;
- il n'y a aucune garantie d'avoir le nom puis le prénom ou l'inverse en fonction des lignes ;
- il n'y a aucune garantie d'avoir des majuscules pour l'un et des minuscules pour l'autre ;
- etc.
Ce n'est pas pour rien que la première règle de modélisation d'une base de données relationnelle, (règle dite de "première forme normale") est que tout attribut doit avoir une valeur "atomique"
Voir ICI
Donc, dans la mesure du possible, la solution est de modifier cette table mal construite pour avoir deux colonnes distinctes.
Bonsoir,
merci pour la réponse.
Mais mon problème ne vient pas de la partie BDD déjà en restitution php j'ai le souci sur les caractères accentués.
J'ai bien compris, mais ça ne change rien à ma réponse qui précède : une BDD mal conçue implique des requêtes complexes, contre performantes et souvent, comme c'est le cas ici, dont le résultat n'est pas fiable à 100%.
À l'arrivée, les utilisateurs comme les informaticiens sont mécontents.
C'est pourquoi il est fondamental de consacrer le temps nécessaire à la modélisation de la BDD dans les règles de l'art.
Mais c'est malheureusement rarement le cas et pour cause : la BDD n'est pas visible par les utilisateurs ni par les décideurs, en conséquence, on lui attribue un budget restreint au minimum, à l'inverse des IHM bien visibles de tous auxquelles on alloue du budget des fois pour de simples opérations cosmétiques sans intérêt réel.
C'est une très lourde erreur.
Donc si vous en avez la possibilité modifiez ou faites modifier la BDD : un vol de première forme normale comme c'est le cas ici est ce qu'il y a de pire.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager