Permutation de valeur dans un tableau

Résolu
jeromexavier Messages postés 4 Date d'inscription lundi 12 septembre 2005 Statut Membre Dernière intervention 16 mai 2007 - 16 mai 2007 à 11:20
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 - 16 mai 2007 à 13:11
Bonjour tout le monde !
urgent, ca fait une heure que j'essais de trouver en vain le nom de la fonction PHP qui permet de changer de place la position des valeurs d'un tableau ou alors, la position de la clé !!
quelqu'un pourrait m'aider?

exemple: array()
avant.
    [0] => pomme
    [1] => framboise
    [2] => orange
    [3] => banane
après.
    [0] => banane
    [1] => pomme
    [2] => framboise
    [3] => orange
encore après.
    [0] => orange
    [1] => banane
    [2] => pomme
    [3] => framboise

ou alors on permute les cles:

avant.
    [0] => pomme
    [1] => framboise
    [2] => orange
    [3] => banane
après.
    [3] => pomme
    [0] => framboise
    [1] => orange
    [2] => banane
encore après.
    [2] => pomme
    [3] => framboise
    [0] => orange
    [1] => banane

etc.

MERCI BCP les GARS !

5 réponses

J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
16 mai 2007 à 11:52
Et ben pourtant... As-tu essayé :

$array = array();
print_r($array);
for ( $i = 0 ; $i<count($array); $i++ ) {
    array_unshift($array,array_pop($array));
    print_r($array);
}

Note : une heure c'est pas long
3
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
16 mai 2007 à 12:28
Salut,

En prenant la solution de J_G, on peut faire ue fonction qui fait ça d'un seul coup :

function array_rotate(&$arr, $reverse=FALSE)
{
if ($reverse == TRUE)
{
return array_push($arr, array_shift($arr));
}
else
{
return array_unshift($arr, array_pop($arr));
}
}

Par défaut, la fonction déplace les éléments vers la fin, en plaçant le dernier au début. Si on passe l'argument $reverse avec la valeur TRUE, ça fait tourner dans l'autre sens.
1
jeromexavier Messages postés 4 Date d'inscription lundi 12 septembre 2005 Statut Membre Dernière intervention 16 mai 2007
16 mai 2007 à 12:00
heu???
je vais donc essayé cela...
merci a tout a l'heure
0
jeromexavier Messages postés 4 Date d'inscription lundi 12 septembre 2005 Statut Membre Dernière intervention 16 mai 2007
16 mai 2007 à 12:56
Merci les gars !


mais j'aurais trop préféré que vous me disiez, ce matin, (si j'avais posté mon msg) qu'une telle fonction n'existait pas en PHP...


snif... voila j'ai passé toute la matinée sur ça... je vais dire quoi à la MOA maintenant ? sic! :-(

en tous cas vos deux exemples sont bon, je vais m'en servir pour développer une fonction proche du décalage de bits en c ou assembleur.

MERCI BCP!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
16 mai 2007 à 13:11
Excellente idée neigedhiver !!!

Allons plus loin alors :

function array_rotate ( &$arr, $steps = 1 ) {
    $steps = (int)$steps; // Garanti un int
    $reverse = ($steps < 0); // Dans quel sens ?
    $steps = abs($steps); // $steps devient un compteur

    while ( $steps-- ) { // Pour chaque pas, effectuer l'opération
       if ( $reverse ) array_push ( $arr, array_shift ( $arr ) )
       else array_unshift ( $arr, array_pop ( $arr ) );
    }

    return count($arr);
}
0
Rejoignez-nous