2011-07-29 145 views
1

知道如果我能上標化,因爲林在PHP的字符串比較新的語言得到一些建議。PHP字符串標記化

我有這樣的:

$full_name = "John Smith" 

我想用一個字符串函數,將提取的第一個名字和姓氏到一個數組的索引。

$arr[0] = "John" 
$arr[1] = "Smith" 

然而,功能上也應該能夠處理這種情況:

$full_name = "John Roberts-Smith II" 
$arr[0] = "John" 
$arr[1] = "Roberts-Smith II" 

$full_name = "John" 
$arr[0] = "" 
$arr[1] = "John" 

在哪裏開始有什麼建議?

+0

首先,你要想想什麼是名字和姓氏。 –

回答

3

使用explode()與可選的極限PARAM:

$full_name = "John Roberts-Smith II" 

// Explode at most 2 elements 
$arr = explode(' ', $full_name, 2); 

// Your values: 
$arr[0] = "John" 
$arr[1] = "Roberts-Smith II" 

你的最後一種情況是特殊的,雖然,將頭名進入第二陣列元件。這需要進行特殊處理:

// If the name contains no whitespace, 
// put the whole thing in the second array element. 
if (!strpos($full_name, ' ')) { 
    $arr[0] = ''; 
    $arr[1] = $full_name; 
} 

因此,一個完整的功能:

function split_name($name) { 
    if (!strpos($name, ' ')) { 
    $arr = array(); 
    $arr[0] = ''; 
    $arr[1] = $name; 
    } 
    else $arr = explode(' ', $name, 2); 

    return $arr; 
} 
+0

謝謝邁克爾。我會嘗試這個例子。感謝您的幫助 – banditKing

+0

@ user657514一定要改變'$ full_name'到'$ name' - 我只是上面固定錯字。 –

0

你應該explode()功能用於此目的。

$name_splitted = explode(" ", "John Smith", 2); 
echo $name_splitted[0]; // John 
echo $name_splitted[1]; // Smith 

documentation -

陣列爆炸(字符串$分界,字符串$串[摘要$極限])

返回一個字符串數組,其中每一個是「字符串的子串「通過將其分割成由字符串」分隔符「形成的邊界而形成。如果「限制」被設置和肯定的,則返回的數組將包含最多包含字符串的其餘部分的最後一個元素「限制」元素。如果「limit」參數爲負數,則返回除最後一個「限制」之外的所有組件。如果「限制」參數是零,那麼這將被視爲1