Trucs et astuces en PHP

Tableaux indexés

Permuter les éléments d'un tableau indexé

Voir manuel PHP

La fonction array_splice($tab, i, n) permet de retirer n éléments d'un tableau à l'index i, et de les retourner dans un autre tableau
La fonction array_splice($tab, i, n, $r) permet d'en même temps y ajouter des éléments d'un autre tableau

En combinant les deux, il est possible d'enlever une cellule d'une position de départ vers une position d'arrivée:

<?php
$a =array("A", "B", "C", "D", "E", "F") ;
# lire: je n'enlève rien (0) de position 2 du tableau '$a' mais y insère
# l'unique (1) cellule que je retire de la position 4 de ce même tableau
array_splice($a, 2, 0, array_splice($a, 4, 1)) ;
$ch =implode(" ", $a) ; echo $ch ;
?>

Remarques:

<?php
$a =array("A", "B", "C", "D", "E", "F") ;
# j'insère en position 4 la cellule ce que je retire de la position 2
array_splice($a, 4, 0, array_splice($a, 2, 1)) ;
$ch =implode(" ", $a) ; echo $ch ;
?>

…donne A B D E C F: la cellule contenant C est bien issue du décalage 2 pour se retrouver au décalage 4, les cellules D et E glissant «vers la gauche». Sous forme de fonction:

<?php
function permute($tableau, $depart, $arrivee)
  {
  array_splice($tableau, $arrivee, 0, array_splice($tableau, $depart, 1)) ;
  return $tableau ; # c'est le tableau modifié qu'il faut renvoyer!
  }
$a =array("A", "B", "C", "D", "E", "F") ;
var_dump(permute($a, 2, 4)) ;
?>