@LastRide
Php developer

Как выбрать уникальные комбинации из массива?

Есть массив, к примеру:

$array = array('orange', 'apple', 'banana', 'pine');


Нужно получить из него все уникальные комбинации.

То есть, должно получиться такое:

array('orange', 'apple');
array('orange', 'banana');
array('orange', 'pine');
array('orange', 'apple', 'banana');
array('orange', 'apple',  'pine');
array('apple', 'banana');
array('apple', 'pine');
array('apple', 'banana', 'pine');
array('banana', 'pine');
  • Вопрос задан
  • 516 просмотров
Решения вопроса 1
27cm
@27cm
TODO: Написать статус
Один из многочисленных вариантов решения:
stackoverflow.com/questions/4279722/php-recursion-...

$a = array('orange', 'apple', 'banana', 'pine');

$len  = count($a);
$list = array();

for ($i = 1; $i < (1 << $len); $i++) {
    $c = [];
    for ($j = 0; $j < $len; $j++) {
    	if ($i & (1 << $j)) {
            $c[] = $a[$j];
    	}
    }
    $list[] = $c;
}

print_r($list);

ideone.com/YE9BII
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Мм...по сути задача сводится к построению перебора + проверке вхождения элемента в множество.
Для проверки стоит определить какую-то функцию, которая массиву ставит в соответствие некоторую строку(по сути какая-то хеширующая функция), причем строка будет уникальна для каждого возможного массива.
Тогда уникальность можно контролировать путём проверки уже имеющихся в некотором массиве уникальных строк текущего значения.
Ответ написан
Комментировать
Сначала почистим
array_unique();
Потом сделаем цикл в цикле и перебором для каждого значения массива подставим остальные. В процессе сложим это в новый массив. Готово.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы