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

mysql 데이터베이스에서 이름과 성을 저장하려면 문자열을 분할해야합니다. 위에서 몇 가지 예를 볼 수 있습니다.스플릿 문자열 성과 이름 (대/소문자)

이 문자열을 분할하는 가장 좋은 방법은 성이 대문자임을 유의하십시오.

결과는 다음과 같아야합니다

ResultString1 : 존 농부

ResultString2 : 라파 오버 마스 드

ResultString3 : 딕 반 데르 벨트

+1

가장 좋은 방법은 처음에는 같은 문자열에 성과 이름을 묶어 두지 않았을 것입니다. 두 번째로 좋은 방법은 [물어 보는 법] (http://stackoverflow.com/help/how-to-ask)을 읽고 지금까지 시도한 것을 보여줄 것입니다. –

+0

간단히 말해서 @FranzGleichmann처럼 2 입력을 사용하는 것이 좋습니다 – DestinatioN

+0

가끔 기존 데이터베이스 테이블 열을 처리해야합니다. DB를 값으로 시작하면 분명합니다. – soccerfan

답변

0

에 따라 다음 단계 :

  1. 공간이 나타날 때 문자열을 배열로 변환하십시오.
  2. array_pop을 사용하여 마지막 배열 요소 (외관상으로는 이름)를 나타냅니다.
  3. 다시 문자열로 array_unshift
  4. 변환 배열을 사용하여 앞에 튀어 이름을 삽입합니다.

    $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

사람의 이름이 2 인 경우 어떻게됩니까? "GATES Billy William"처럼 – Mike

+0

그러면 시나리오에 따라 "William GATES BILLY"와 같이 변환됩니다. –

+0

질문은 성/이름인지 여부를 결정합니다. – Mike

1

이 정말 나쁜 생각입니다.

무언가를 나타내는 순수한 문자 케이스에 의존하는 경우에 가지가 잘못 될 수 있습니다. 그리고 그것을 다른 문자열에 모두 저장하면 문제가 지속됩니다.

그렇다면 데이터베이스를 유지 관리해야하는 다음 불행한 사람에게 구조화되지 않은 정보를 전달하지 않도록 새 값을 별도로 저장하여 불량을 줄일 수 있습니다 (소량). 이 코드는 그렇게하며 여러 단어로 된 이름 (예 : "John Paul"등)을 허용합니다.

또한 배열 형식으로 처리하도록 만들었습니다. 아마 당신이 3 개 이상의 이름을 처리하려고한다고 가정했기 때문입니다.

<?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

다른 사람들이 말했듯이 문제 설명은 다소 모호합니다. 그러나이 같은 고정 된 패턴으로, 당신은 아주 잘 (성 대문자 항상 주어진) 정규 표현식을 통해 이름을 분할 수 :

<?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"; 
    } 
} 

?> 

demo on ideone.com (플러스 one on regex101.com을) 작업을 참조하십시오.