2012-11-14 26 views
0

我正在取一個名稱列表並將姓氏放在第一位。當我使用explode創建$ name數組時,第一個名字的第一個名字在數組位置0,第一個名字在第一個位置,但其他名字的第一個名字在第一個位置,第二個名字在第二個位置。foreach中的分解變量,但在第一個數組之後,數組從1開始,而不是0

我從另一個做類似事情的腳本複製了這段代碼,但是在那段代碼中,包括第一個實例在內的所有名字都從1開始(至少與其一致)。

我猜我缺少一些基本的東西。感謝您的協助。

代碼如下。

$_511a = 'Maria Smith, Lance Farquardt, Daniel Berquist, John Barton, Milo Silver'; 
echo '511a: ' . $_511a . '<br />'; 
$castsplit = explode(',' , $_511a); 
foreach($castsplit as $cast) { 
    $name = explode(' ',$cast); 
    $lastname = end($name); 
    if(count($name) >= 4){ 
     $middlename = $name[2]; 
    } else { 
     $middlename = null; 
    } 
    $firstname = $name[1]; 
    if($middlename){ 
     $castmembers[] = $lastname . ', ' . $firstname . ' ' . $middlename; 
    } else { 
     $castmembers[] = $lastname . ', ' . $firstname; 
    } 
} 
echo "Corrected names: <br />"; 
foreach($castmembers as $castmember) { 
    echo $castmember . '<br />'; 
} 

回答

0

您在字符串「$ _511a」之間有空格所以爆炸函數必須有一個空格也。所以$ name的索引也會改變,因爲現在我們有0索引的第一個元素。

變化碼

$castsplit = explode(',' , $_511a); 

$castsplit = explode(', ' , $_511a); 

$firstname = $name[1]; 

$firstname = $name[0]; 
3

在列表中的第一個名字後面的所有名稱前面都有一個空格。 explode()計算該空間,在結果數組的0索引中放入一個空字符串。

變化:

$name = explode(' ',$cast); 

要:

$name = explode(' ',ltrim($cast)); 
+0

謝謝,我知道我是不佔爲我的最初「爆炸」的空間,這解釋了爲什麼第一個顯示好,其次是關閉。我知道我錯過了一些東西。 – mattrweaver

2

的問題是名稱之間的逗號後的空間。既可以使用「,」或「,」作爲分隔符,也可以使用正則表達式來拆分字符串。

$castsplit = preg_split('/,\s*/', $_511a); 

以上將接受所有與此相同的分隔符:<comma><zero or more spaces>

+0

我建議'/,\ s * /',以允許多個空格。 – Barmar

+0

@Barmar是的,那會更好。更新! – wassup

0

嘗試可能:

$castsplit = explode(", ", $_511a); 

//your variable name cast is ambiguous. I changed it 
foreach($castsplit as $member) { 
    $nameArr = explode(' ', $member); 
    $first = $nameArr[0]; 
    $last = end($nameArr); 
    str_replace($first, $last, $member, 1); 
    str_replace($last, $first, $member, 1); 

    echo $member; 
} 

通知在第一逗號後的空間爆炸

相關問題