2016-10-24 1 views
-4
<?php 
$string1 = "FARMER John"; 
$string2 = "OVERMARS DE Rafa"; 
$string3 = "VAN DER BELT Dick"; 
?> 

Pour enregistrer le prénom et le nom dans une base de données mysql, je dois diviser la chaîne. Ci-dessus, vous pouvez voir quelques exemples.Chaîne fractionnée Prénom et nom (majuscules et minuscules)

Quelle est la meilleure façon de diviser cette chaîne, notez que le nom de famille est en majuscules.

Résultat devrait être:

ResultString1: John FARMER

ResultString2: Rafa OVERMARS DE

ResultString3: Dick VAN DER CEINTURE

+1

Le meilleur moyen aurait été de ne pas d'emballage premier et nom de famille dans la même chaîne en premier lieu. la deuxième meilleure façon aurait été de lire [how to ask] (http://stackoverflow.com/help/how-to-ask) et de montrer ce que vous avez essayé jusqu'ici. –

+0

Je vous recommande simplement d'avoir 2 entrées comme @FranzGleichmann déjà dit – DestinatioN

+0

Parfois, vous devrez faire face aux tables de base de données existantes en colonnes. C'est évident quand vous démarrez une base de données avec des valeurs que vous divisez à l'avance. – soccerfan

Répondre

0

Suivez les étapes suivantes:

  1. Convertir la chaîne en tableau lorsque l'espace apparaît.
  2. Sortir le dernier élément du tableau (apparemment le prénom) en utilisant array_pop.
  3. Insérez le nom de sortie à l'avant en utilisant array_unshift
  4. Convertissez le tableau en chaîne.

    $string3 = "VAN DER BELT Dick"; 
    
    $arr = explode(" ", $string3); 
    array_unshift($arr, array_pop($arr)); 
    echo implode(" ", $arr);  // Dick VAN DER BELT 
    
0
$arr = explode(" ", $string3); 
$last_word = array_pop($arr); 
$final_string = ucfirst($last_word)." ".strtoupper(implode(" ", $arr)); 
echo $final_string; 
+0

Que faire si la personne a 2 noms? Comme "GATES Billy William" – Mike

+0

Puis selon le scénario mentionné, il va le convertir comme "William Gates Billy". –

+0

La question indique que ce qui détermine si c'est le prénom/nom est le cas. – Mike

1

Ceci est une très mauvaise idée.

Il ya tonnes de choses qui peuvent mal se passer si vous vous fiez purement et simplement à un cas de lettre pour signifier quelque chose. Et sauvegarder tout cela dans une autre chaîne perpétue le problème. Cela dit, vous pouvez atténuer (une petite quantité) la méchanceté en stockant les nouvelles valeurs séparément, afin de ne pas transmettre des informations non structurées à la prochaine personne malheureuse qui doit maintenir votre base de données. Ce code fait cela, tout en permettant également des prénoms multi-mots (comme "John Paul" ou autre). Je l'ai également fait gérer ces sous forme de tableau, car je suppose que vous voulez probablement gérer plus de trois noms.

<?php 

$string1 = "FARMER John"; 
$string2 = "OVERMARS DE Rafa Dafa"; 
$string3 = "VAN DER BELT Dick"; 
$strings = array(array('orig'=>$string1), array('orig'=>$string2), array('orig'=>$string3)); 
foreach($strings as $key=>$val){ 
    $oldwords = explode(' ',$val['orig']); 
     foreach($oldwords as $word){ 
      if(preg_match('/[a-z]/',$word)){ 
       $firstname .= " ".$word; 
      }else{ 
       $lastname .= " ".$word; 
     } 
    } 
    $firstname = trim($firstname); 
    $lastname = trim($lastname); 
    $strings[$key]['newfirst'] = $firstname; 
    $strings[$key]['newlast'] = $lastname; 
    $firstname = ""; 
    $lastname = ""; 
} 
print_r($strings); 

?> 
0

Comme d'autres l'ont dit, la description de votre problème est plutôt vague. Cependant, avec un motif fixe comme celui-ci, vous pourriez très bien séparer les noms par une expression régulière (étant donné le nom de famille est toujours en majuscules):

<?php 
$strings = array("FARMER John", "OVERMARS DE Rafa", "VAN DER BELT Dick"); 

$regex = '~^([A-Z ]+\b)(\w+)$~'; 

foreach ($strings as $string) { 
    if(preg_match($regex, $string, $match)) { 
     $surname = trim($match[1]); 
     $forename = trim($match[2]); 
     echo "Surname: $surname, Forename: $forename\n"; 
    } 
} 

?> 

Voir un travail demo on ideone.com (plus le one on regex101.com).