2010-11-22 41 views
3

我們有數組名稱:將第一個字到最後

array(
Robin Hood, 
Little John, 
Maid Marion, 
Friar Tuck, 
Will Scarlet 
) 

每個項目中的第一個字應移到此項目的結束。

我們應該得到這樣的:

array(
Hood Robin, 
John Little, 
Marion Maid, 
Tuck Friar, 
Scarlet Will 
) 

我們怎樣才能做到這一點?

它,如果我們使用foreach()

感謝更好。

+3

「Butros Butros Ghali」或「Hillary Rodham Clinton」或「Carl Gustav Jung」怎麼樣?前兩者有兩部分姓氏,後一部分爲兩部分名字 – 2010-11-22 11:21:40

+0

請澄清,如果你是第一個字或名字後面。如果在名字後面,請澄清如何解決佩卡指出的問題。 – Gordon 2010-11-22 11:25:18

回答

5

如果你只需要第一個空格之前移動的部分(設置在explode()$limit = 2只得到兩個部分):

function func($n) { 
     list($first, $rest) = explode(' ', $n, 2); 
     return $rest . ' ' . $first; 
} 
$trans = array_map('func', $names); 

Demo

給出:

Array 
(
    [0] => Hood Robin 
    [1] => John Little 
    [2] => Marion Maid 
    [3] => Tuck Friar 
    [4] => Scarlet Will 
    [5] => Fitzgerald Kennedy John 
) 
+1

從PHP 5.3開始,你可以使用lambda函數[回調函數](http://www.php.net/manual/en/language.pseudo-types.php#language.types.callback)。 – jensgram 2010-11-22 11:34:06

3

並不是一個特別迷人的解決方案:

foreach($person_array as $key => $value){ 

$reversed_person_array[]=implode(' ', array_reverse(explode(' ', $value,2))); 

} 
+1

你應該使用'explode('',$ value,2)'。 – Gumbo 2010-11-22 11:28:19

+0

請注意,顛倒數組不會給出所描述的結果(第一個元素到最後)名稱超過2部分。 – oezi 2010-11-22 11:28:35

+1

而foreach需要一個'as'。 – shamittomar 2010-11-22 11:29:37

1

穿行您陣列,使用explode拆分爲'「(空)的條目,然後使用array_shift削減並獲得的第一個元素,它array_push到'結尾和implode整個事情再次''(空間)。

3
foreach($names as $key => $name) 
{ 
    $splitted = explode(' ', $name, 2); 
    $names[$key] = $splitted[1].' '.$splitted[0]; 
} 
+2

你應該使用'explode('',$ name,2)'。 – Gumbo 2010-11-22 11:28:39

+0

注意:對於超過2個部分的名字,在第二個部分之後你會錯過任何事情。請用限制2爆炸。 – oezi 2010-11-22 11:29:47

+0

好吧,做到了。 – shamittomar 2010-11-22 11:31:08

0

Ha !這是偉大的艾哈邁德!

我從事類似的東西...得

$first = $array[0]; 
array_shift($array); 
array_push($array, $first); 

然後我刷新頁面,看到你的。乾淨整潔!

相關問題