2010-11-22 3 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'? Первые два имеют фамилию из двух частей, второе - имя из двух частей –

+0

, пожалуйста, уточните, находитесь ли вы после первого слова или имени. Если после первого имени, пожалуйста, проясните, как подойти к проблеме, которую указал Пекка выше. – Gordon

ответ

5

Если вам нужно только переместить часть до первого пробела (установка $limit = 2 в explode() получить только две части):

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 вы можете использовать лямбда-функции для [функций обратного вызова] (http://www.php.net/manual/en/language.pseudo-types.php#language.types.callback). – jensgram

3

Не особенно гламурно решение:

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

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

} 
+1

Вы должны использовать 'explode ('', $ value, 2)'. – Gumbo

+0

Обратите внимание, что изменение массива не даст описанный результат (первый элемент до конца) для имен, состоящих из более чем двух частей. – oezi

+1

И для foreach требуется 'as'. – shamittomar

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

+0

примечание: для имен с более чем 2 частями вы будете пропускать все после второго. использование взорвать с ограничением 2 пожалуйста. – oezi

+0

Хорошо, сделай это. – shamittomar

0

Ha ! это замечательно Ахмет!

я работал над чем-то подобным ... получил

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

я обновил страницу и увидел твое. Чистый и аккуратный!

Смежные вопросы