<?php
/**
* Questa funzione genera un array con tutte le permutazioni
* di lunghezza $length utilizzando gli elementi presenti in $base
* @param $base array contenente gli elementi da permutare
* @param $length lunghezza desiderata per le permutazioni
*/
function perm( $base, $length){
//Array in cui finiscono tutte le permutazioni
$perm = array();
//Funzione che riempie l'array
do_perm($base, $length, array(), $perm);
//Restituzione dell'array
return $perm;
}
/**
* Questa funzione riempie l'array $result, non va usata direttamente
* @param $base array contenente gli elementi da permutare
* @param $length lunghezza desiderata per le permutazioni
* @param $partial array contenente le permutazioni parziali
* @param $result array in cui inserire i risultati
*/
function do_perm( $base, $length, $partial, &$result ){
//Se in $partial ci sono $length elementi lo agigungo ai risultati
//e non faccio ninet'altro
if( count($partial)== $length ){
$result[] = $partial;
return;
}
//Per ogni elemento in $base
foreach( $base as $elem ){
//Copio la permutazione parziale corrente
$new = $partial;
//Aggiungo alla copia l'elemento
$new[] = $elem;
//Richiamo ricorsivamente la funzione per controlla se la permutazione
// va bene (if precedente) o per aggiungere nuovi elementi
do_perm( $base, $length, $new, $result );
}
}
$elementi = array('12','1','5','9', '0');
$lunghezza = 2;
$permutazioni = perm( $elementi, $lunghezza );
foreach($permutazioni as $permutazione ){
echo implode($permutazione)."<br />";
}
?>