@PoodingRex

Как просчитать все варианты совмещения на php?

Добрый день. Подскажите, пожалуйста, как можно просчитать все варианты совмещения элементов массива?
Например, есть массив 1,2,3,4,5,6
Нужно чтобы прочитал варианты: 1,2; 1,3; ... ; 1,6 потом 1,2,3; 1,2,4; 1,2,5, потом 1,3,4; 1,3,6 и т.д.

Те все возможные вариации совмещения. Просто, даже не совсем догадываюсь как эту операцию обозвать можно.

p.s. варианты перестановки учитывать не нужно, т.е. 1,2,3 == 1,3,2 == 3,1,2
  • Вопрос задан
  • 167 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Например, есть массив 1,2,3,4,5,6
Нужно чтобы прочитал варианты: 1,2; 1,3; ... ; 1,6 потом 1,2,3; 1,2,4; 1,2,5, потом 1,3,4; 1,3,6 и т.д.
p.s. варианты перестановки учитывать не нужно, т.е. 1,2,3 == 1,3,2 == 3,1,2

как эту операцию обозвать можно.

Целиком это называется "множество всех подмножеств" (в вашем списке, однако, отсутствуют пустое подмножество и подмножества из одного элемента). То что вы назвали вариантами -- это "сочетания из N по K".
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
usdglander
@usdglander Куратор тега PHP
Yipee-ki-yay
Буквально по первой ссылке в гугле находится решение:
print_r(AllPermutations(array('peter', 'paul', 'mary')));

function AllPermutations($InArray, $InProcessedArray = array())
{
    $ReturnArray = array();
    foreach($InArray as $Key=>$value)
    {
        $CopyArray = $InProcessedArray;
        $CopyArray[$Key] = $value;
        $TempArray = array_diff_key($InArray, $CopyArray);
        if (count($TempArray) == 0)
        {
            $ReturnArray[] = $CopyArray;
        }
        else
        {
            $ReturnArray = array_merge($ReturnArray, AllPermutations($TempArray, $CopyArray));
        }
    }
    return $ReturnArray;
}


upd: Для шести элементов количество перестановок 720 (6!)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы