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:
- la première position (offset) est 0: la position 4 désigne donc la cinquième cellule
- quand l'on déplace une cellule vers la droite, il est inutile de se préoccuper du décalage produit par le retrait en amont:
<?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)) ; ?>