Здравствуйте. Помогите пожалуйста советом. Нужно реализовать перестановку (в Комбинаторике это называется "размещение с повторением") на РНР. Для примера, есть массив чисел 1,2,3. Нужно вычислить все варианты: 123 132 312... и т.д. Спасибо.
для этого нужно написать алгоритм, а потом, используя конструкции языка, реализовать его. ПС. чисто функции в пхп array getRazmeschenieSPovtoreniem(array $source) наверное нету.
PHP: <?php class Variant{ private $array; private $i = 0; private $size; private $self = array(); private $done = false; static public $count = 0; static public $swapCount = 0; public function __construct(&$array){ self::$count++; $this->array = &$array; $this->size = count($array); $size = $this->size; $this->i = 1; while($size){ $this->i *= $size--; } $this->self = array_keys($this->array); } public function next(){ if ($this->done) return; for ($i = $this->size - 2; $i >= 0; --$i){ if ($this->self[$i] < $this->self[$i+1]){ $j = $this->size; while ($this->self[--$j] < $this->self[$i]); $this->swap($i, $j); $l = $this->size - 1; for ($k = $i + 1; $l > $k; $k++, $l--){ $this->swap($k, $l); } return; } } if ($i < 0) $this->done = true; } public function has(){ return !$this->done; } private function swap($i, $j){ self::$swapCount++; $tmp = $this->self[$i]; $this->self[$i] = $this->self[$j]; $this->self[$j] = $tmp; $tmp = $this->array[$i]; $this->array[$i] = $this->array[$j]; $this->array[$j] = $tmp; } } $array = array(1, 2, 3); for ($v = new Variant($array); $v->has(); $v->next()){ print_r($array); } а вообще попробуй погуглить next_permutation