PHP - Toutes les combinaisons [update.02.09.2016]

Description

Je dépose ce code parce qu'il est plus rapide que ceux que j'ai trouvé sur le net
- Update: caractères identiques autorisés (ex: $string = 'AABBCC';)

- Version la plus récente http://bit.ly/2W91tFB


<?php
/**
Attention ! Rechercher toutes les combinaisons est un long processus. 
Par exemple une $string de 10 caractères correspond à 3 628 800 combinaisons. 
Veuillez adapter le max_execution_time et le memory_limit du php.ini en conséquence. 
(La config de base de wampserver 3.0.4 est suffisante pour une $string de 9 caractères) 
*/

// Testé avec PHP 5.6.19 (Wampserver 3.0.4 (config de base)) / Firefox 48.0.2 / Intel celeron 3050 1.60GHZ >>> PC lent !

function all_combinations($a) {
 $b = str_split($a);
 $c = array();
 
 foreach($b as $k => $v) {
  $d = implode(array_diff_key($b, array($k => $v)));
  
  if(strlen($d) >= 3) {
   foreach(all_combinations($d) as $vv) {
    $c[] = $v . $vv;
   }
  } else {
   $c[] = $v . $d;
   $c[] = $v . strrev($d);    
  }
 }
 return $c;  
}
$string       = 'abcdefgh'; 
$range        = range(1, strlen($string));

$start        = microtime(true);
$combinations = all_combinations($string);
$end          = microtime(true);

echo 'Nombre de combinaisons possibles: ' . array_product($range) . '<br>';
echo 'Nombre de combinaisons crées: ' . count($combinations) . '<br>'; 
echo 'Nombre de combinaisons uniques crées: ' . count(array_unique($combinations)) . '<br>'; 
echo "Temps d'execution: " . number_format($end - $start, 3) . " sec <br>";
/** 
Nombre de combinaisons possibles: 40320
Nombre de combinaisons crées: 40320
Nombre de combinaisons uniques crées: 40320
Temps d'execution: 1.814 sec  
*/

echo '<pre>';
print_r(array_unique($combinations));
echo '</pre>';

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.