Ecco un altro modo.
Questa funzione incrementi nella base ([numero di elementi dell'array])
e utilizza la funzione strtr di scambiare i caratteri per le stringhe.
function everyCombination($array) {
$arrayCount = count($array);
$maxCombinations = pow($arrayCount, $arrayCount);
$returnArray = array();
$conversionArray = array();
if ($arrayCount >= 2 && $arrayCount <= 36)
{
foreach ($array as $key => $value) {
$conversionArray[base_convert($key, 10, $arrayCount)] = $value;
}
for ($i = 0; $i < $maxCombinations; $i++) {
$combination = base_convert($i, 10, $arrayCount);
$combination = str_pad($combination, $arrayCount, "0", STR_PAD_LEFT);
$returnArray[] = strtr($combination, $conversionArray);
}
return $returnArray;
}
echo 'Input array must have between 2 and 36 elements';
}
Poi ...
print_r(everyCombination(array('a', 'b', 'c', 'd')));
Questo sembra anche essere significativamente più veloce rispetto all'esempio ricorsivo di seguito.
Utilizzando microtime() sul mio server di questo codice viene eseguito in 0.072862863540649 secondi
L'esempio ricorsivo di seguito prende 0.39673089981079 secondi.
138% più veloce!
fonte
2012-12-24 14:03:21
Funziona perfettamente - Grazie! – user1926784
Questo è un grande pezzo di codice. +1 – Peter