2012-01-18 53 views
-1

這裏是問題:我想分割一個字符串,使其名稱和名字,但我的兩個變量是空的,我不明白爲什麼...有人可以幫助我?這是我的代碼:PHP - 字符串解析和連接問題

$nom_aut1 = ""; 
$prenom_aut2 = ""; 
//$auteur1 is already initialized 

    for ($i = 0; $i < strlen($auteur1); ++$i) 
    { 
    if ($auteur1[$i] != ' ') continue; 

    for ($j = 0; $j < $i; ++$j) 
    { 
     $nom_aut1 .= $auteur[$j]; 
    } 

    for ($j = $i+1; $j < strlen($auteur1); ++$j) 
    { 
     $nom_aut1 .= $auteur1[$j]; 
    } 

    break; 
    } 
    echo '"'.$nom_aut1.'.'.$prenom_aut1.'"'; 

謝謝:)

+1

您是否嘗試過PHP函數explode()?我認爲一種方式更適合你這樣做。 – stefandoorn 2012-01-18 10:41:21

+0

輸入字符串是怎樣的? – feeela 2012-01-18 10:41:29

+0

你能描述你想達到的目標嗎?我認爲可能有更好的方法(沒有這樣的循環/休息/繼續結構)。如果有的話 - 看起來像你的代碼在第一個字母后停止,因爲中斷髮出。 – Aurimas 2012-01-18 10:41:36

回答

3

你要根據空間的名稱分裂成姓氏和名字?爲什麼不只是這樣做:

$names = explode(" ",$name); 

如果$name = "Hello World"

$names將是一個陣列,使得

$names[0] = "Hello" 
$names[1] = "World" 

這樣一來,如果有一箇中間名,就可以得到這一點。

你可以這樣來做:

$names = explode(" ",$name); 

if (count($names) == 1) //only first name 
{ 
    $first = $names[0]; 
    $last = ""; 
} 
else if (count($names) == 2) //only first and last name 
{ 
    $first = $names[0]; 
    $last = $names[1]; 
} 
else //one or more middle names were provided 
{ 
    $first = $names[0]; 
    $last = $names[count($names)-1]; 

    for($i=1;$i<count($names)-1;$i++) 
     $middle .= $names[$i] . ' '; 
    $middle = trim($middle); 
} 

所以,如果$name = "Hello Foo Bar World"

$first = "Hello" 
$last = "World" 
$middle = "Foo Bar" 
+0

這正是我想要做的。 謝謝你,它會減輕我的代碼:) – Carvallegro 2012-01-18 10:42:12

+0

這不完全相同,但'explode(「」,$ name,2)'會。 – Gumbo 2012-01-18 10:45:57

+0

@Hahuha:編輯,以顯示如何你也可以選擇中間名,如果你需要 – xbonez 2012-01-18 10:48:21

1

如果信件不等於「」它繼續循環和for循環不執行2 。

但你在PHP中尋找explode功能:

所有的
<?php 
    $names = explode(' ', $name); 
    $prenom = $names[0]; 
    $nom = $names[1]; 
?> 
+0

啊,xbonez鍵入的更快一點... – 2012-01-18 10:44:57

1

首先,請仔細檢查所有的變量名。

你是在說:

$nom_aut1 = ""; 
$prenom_aut2 = ""; 

你是不是在你的代碼中使用$ prenom_aut2任意位置,然後你迴盪:

echo '"'.$nom_aut1.'.'.$prenom_aut1.'"'; 

在回答您的具體問題,您聲明,填充並回應不同的變量。

+0

你說得對,當我問我的問題時我犯了一些錯誤。另外,我剛剛注意到在我的第二個內部循環中,我連接了$ nom_aut1而不是$ prenom_aut1。但有了這些答案,我的代碼已經完全改變了。 – Carvallegro 2012-01-18 11:08:13

+0

絕對地,建議的方法更合適,我只是回答你的問題。 – 2012-01-18 11:14:08

0

爆炸和操縱這種方式的另一種方法!

list($first_name, $last_name) = explode(" ", $name); 
echo $first_name; 
echo $last_name;