2011-07-29 2 views
1

phpで文字列をトークン化する際に少しアドバイスがありましたか?php string tokenizing

私はこれを持っている:

私は、配列のインデックスに姓と名を抽出する文字列関数を使用したい
$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()として扱われます。

$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から -

アレイ(文字列$デリミタ、文字列$文字列[、int型$制限])

を爆発ストリング」のサブストリングでそれぞれが文字列の配列を返しますそれは文字列「デリミタ」によって形成される境界上で分割することによって形成される。 "limit"が設定され、正の場合、返される配列には最大限の "limit"要素が含まれ、残りの文字列を含む最後の要素が含まれます。 "limit"パラメータが負の場合、最後の "limit"を除くすべてのコンポーネントが返されます。 「制限」パラメータがゼロである場合、これは、オプションの制限のparamで1
関連する問題