2010-11-22 7 views
3

Nous avons tableau contenant les noms:premier mot à la fin

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

Le premier mot à l'intérieur de chaque élément doit être déplacé à la fin de cet article.

Nous devrions obtenir ceci:

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

Comment pouvons-nous faire?

Son meilleur si nous utilisons foreach()

Merci.

+3

Qu'en est-il de «Butros Butros Ghali» ou «Hillary Rodham Clinton» ou «Carl Gustav Jung»? Les deux premiers ont un nom de famille en deux parties, le dernier un prénom en deux parties –

+0

s'il vous plaît préciser si vous êtes après le premier mot ou le prénom. Si après le prénom, veuillez clarifier comment aborder le problème signalé par Pekka ci-dessus. – Gordon

Répondre

5

Si il vous suffit de déplacer la partie avant la première des espaces (réglage $limit = 2 dans explode() pour obtenir deux parties seulement):

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

(Demo)

donne:

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

Depuis PHP 5.3, vous pouvez utiliser les fonctions lambda pour [fonctions de rappel] (http://www.php.net/manual/fr/language.pseudo-types.php#language.types.callback). – jensgram

3

Pas une solution particulièrement glamour:

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

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

} 
+1

Vous devriez utiliser 'explode ('', $ value, 2)'. – Gumbo

+0

Notez que l'inversion du tableau ne donnera pas le résultat décrit (premier élément à la fin) pour les noms comportant plus de 2 parties. – oezi

+1

Et le foreach a besoin d'un 'as'. – shamittomar

1

promenade à travers vous tableau, utilisez explode pour diviser l'entrée au ' « (espace), puis utilisez array_shift pour couper de et obtenir le premier élément, array_push à la fin et implode le tout à nouveau avec '' (espace).

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

Vous devriez utiliser 'explode ('', $ name, 2)'. – Gumbo

+0

note: pour les noms avec plus de 2 parties, vous manquerez tout après la seconde. Utilisez exploser avec la limite 2 s'il vous plaît. – oezi

+0

Très bien, c'est fait. – shamittomar

0

Ha ! c'est génial Ahmet!

je travaillais sur quelque chose de similaire ... obtenu à

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

je rafraîchi la page et ai vu le vôtre. Propre et soigné!

Questions connexes