dizaines (rang 8) -> centaines (rang 7) .... // trouver la première position où le chiffre de rang n est supérieur à celui de rang n-1 $index1=count($arr) -2; while($arr[$index1] >= $arr[$index1+1]){ $index1--; if($index1 == -1){ //l'array est déja totalement inversé (1,2,3) => (3,2,1) return false; } } //trouver un nombre plus grand que celui trouvé avant : $arr[$index1] for($index2 = count($arr) - 1 ; $arr[$index2] <= $arr[$index1]; $index2--){} //les permutter $arr=permut($index1,$index2,$arr); //mettre ce qui suit $index1 dans l'ordre $partOfArr=array(); for($i = $index1+1; $i < count($arr); $i++){ $partOfArr[]=$arr[$i]; } sort($partOfArr); $j=0; for($i = $index1+1; $i < count($arr); $i++){ $arr[$i]=$partOfArr[$j]; $j++; } return $arr; }