Here's the function I use:

// array array_permute(array [, string])
//
// Returns an array containing the permutations of the values in an array.
//
// Example:
// $a = array(1, 2, 3);
// $p = array_permute($a)
//
// Result:
// p[0] = '1,2,3'
// p[1] = '1,3,2'
// p[2] = '2,1,3'
// p[3] = '2,3,1'
// p[4] = '3,2,1'
// p[5] = '3,1,2'
//
function array_permute(&$a, $glue = ',')
{
        $retval = array();
        array_permute_internal($a, $glue, $retval, 0, count($a));
        return $retval;
}

// Private function used by array_permute.
function array_permute_internal(&$a, $glue, &$retval, $depth, $ubound)
{
        if ($ubound > 0)
        {
                for ($i=0; $i < $ubound; $i++)
                {
                        $c = $a[$depth+$i];
                        $a[$depth+$i] = $a[$depth];
                        $a[$depth] = $c;
                        array_permute_internal($a, $glue, $retval, $depth+1, 
$ubound-1);
                        $c = $a[$depth+$i];
                        $a[$depth+$i] = $a[$depth];
                        $a[$depth] = $c;
                }
        }
        else
        {
                $retval[] = implode($glue, $a);
        }
}

-----Original Message-----
From: Evan Nemerson [mailto:[EMAIL PROTECTED]]
Sent: Thursday, May 16, 2002 12:17 AM
To: [EMAIL PROTECTED]
Subject: [PHP] Generate every possible combination


I need to generate every possible combination of the the values in an array.
For example, if...

$array = Array("A", "B", "C");

I want to be able to do something like

print_r(magic_function($array));

which would output

Array
(
        [0] => "ABC"
        [1] => "ACB"
        [2] => "BAC"
        [3] => "BCA"
        [4] => "CAB"
        [5] => "CBA"
)

I really have no idea where to begin. The best lead I can think of is that
there are going to be n! elements in the output array, where n is the size
of
the input array.

Any help would be greatly appreciated.


Evan



--
Think not those faithful who praise all thy words and actions, but those who
kindly reprove thy faults.

Socrates


--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to