Couper une chaine de caracteres

Couper une chaine de caracteres - PHP - Programmation

Marsh Posté le 27-04-2010 à 15:45:08    

Bonjour,
 
J'ai un petit problème assez particulier. Dans ma base de données, j'ai une colonne contenant le nom et le prénom sous la forme suivante : NOM Prénom
 
Sachant que le Nom sera toujours en majuscule et le prénom en minuscule avec seulement la première lettre en majuscule. Ce que je voudrais faire c'est découper cette chaine de caractères en deux afin de séparer le nom du prénom puis les insérer dans une table avec le nom dans la colonne nom et prenom dans la colonne prenom.
 
En fait j'ai utilisé la fonction

Code :
  1. explode(' ', $str);


 
qui marche bien pour le cas où l'on est dans la configuration NOM Prenom. Le problème survient lorsque j'ai un nom composé du genre NOM DE NOM Prenom et là je coince je vois pas trop comment faire un algorithme générique.
 
Si quelqu'un a idée, ça serait bien.

Reply

Marsh Posté le 27-04-2010 à 15:45:08   

Reply

Marsh Posté le 27-04-2010 à 15:56:43    

ben à moins d'avoir une BD de tous les prénoms, tu as un gros pb car si le gars à un nom composé et un prénom composé et que pour le prénom, il met pas le -, t'es mal :/
 
Normalement, tu devrais découper sur le dernier espace puisque les prénoms composés sont séparés par le -, ce qui n'est pas le cas des noms...
Pour mon soft Astres (cf signature), j'ai implémenté un algo de calcul de trigramme (voire plus de lettres dans le cas de nom-prénom composés justement). J'avais donc presque le même pb que toi, la seule différence, c'est que la séparation nom prénom était déjà faite.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 27-04-2010 à 16:22:18    

en jouant avec preg_match() ?

 


Code :
  1. $string = "COUCOU COUCOU coucou coucou";
  2. $pattern = '/^([A-Z ]*) ([a-z ]*)$/';
  3. preg_match($pattern,$string,$matches);
  4. print_r($matches);
 

Array
(
    [0] => COUCOU COUCOU coucou coucou
    [1] => COUCOU COUCOU
    [2] => coucou coucou
)


Message édité par art_dupond le 27-04-2010 à 16:29:40

---------------
oui oui
Reply

Marsh Posté le 27-04-2010 à 16:37:31    

Salut,
 
Merci pour vos réponses, c'est super cool. J'étais parti sur le schéma suivant :
 
Compte le nombre de majuscule
Pour i=0 jusqu'à nombre de majuscule-1  
Faire un explode
Stock le NOM dans une colonne et le prenom dans une autre => peut être que je devrais utiliser les matrices ???
Stock dans la BDD le nom dans colonne nom et le prénom dans la colonne nom
 
Pour compter le nombre de majuscule j'ai fais :
 

Code :
  1. function countUppercase($string) {
  2.      return preg_match_all("/[A-Z]/", $string, $result);
  3. }


 
Qu'en pensez vous ?
 
art_dupond, merci pour ton code, par contre, si je veux ensuite stocker le nom et le prenom dans ma BDD je ne dois pas insérer la valeur [0] ?
 
Est ce que ton code peut marcher en faisant un select que je stock ma variable $string ???

Reply

Marsh Posté le 27-04-2010 à 17:22:43    

Par contre, je n'arrive pas à decouper toutes mes lignes de ma table, ça me le fait uniquement que pour la première ligne.
 

Code :
  1. $pattern = '/^([A-Z ]*) ([a-z ]*)$/';
  2. while ($rows = odbc_fetch_object($result)) {
  3.     //print $rows->morph;
  4. preg_match($pattern,$rows->morph,$matches);
  5. print_r($matches);
  6.     }

Reply

Marsh Posté le 28-04-2010 à 07:35:36    

Si je peux me permettre de rebondir sur ce sujet...
J'ai un cas un peu different :
Je dois afficher une phrase qui doit faire entre 50 et 150 chr
je veux donc afficher la phrase sur deux lignes
je coupe ma chaine mais c'est CRACRA
 
=> comment couper la chaine sur un ESPACE et non en plein milieu d'un mot ?


---------------
http://www.ypikay.com
Reply

Marsh Posté le 28-04-2010 à 09:40:04    

ben tu repères le caractère où tu coupes et ensuite, tu recherches l'espace le plus proche (recherche à gauche et à droite et tu prends la distance min).


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 28-04-2010 à 10:27:29    

oui j'y avais pensé mais c'est lourd...
ok merci !


---------------
http://www.ypikay.com
Reply

Marsh Posté le 29-04-2010 à 10:02:35    

Hello,
 
Est ce que quelqu'un aurait une idée pourquoi ça me découpe uniquement que pour la première ligne de la colonne de ma table ???
 

Code :
  1. while ($row = odbc_fetch_row($result)) {
  2. preg_match($pattern,odbc_result ($result,1),$matches);
  3. print_r($matches);
  4. }

Reply

Marsh Posté le 29-04-2010 à 10:10:00    

en 2ième argument, preg_match attend une string et pas un tableau, ça doit être pour ça.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed