Конечно, вы можете использовать библиотеки перестановок, но вам нужно sort
каждый отдельный подрешеток в алфавитном порядке и удалять дубликаты с помощью array_unique()
.
Или вы можете попытаться быть более экономически эффективным:
$myarray = array(
'red', 'yellow', 'green', 'blue'
);
$result = [];
while ($item = array_pop($myarray)) {
foreach($myarray as $couple) {
$result[] = [$item, $couple];
}
}
print_r($result);
Во-первых, вы сокращаете исходный массив каждый шаг, и каждый контекст должен иметь свою копию массива. Это означает, что если вы хотите инкапсулировать механику в рекурсивную функцию для создания более двух массивов-членов, вам нужно предотвратить изменение их внутренних копий чем-либо еще, кроме array_pop
их собственного контекста.
Для объяснения приведенного выше кода я выталкиваю один элемент из верхней части исходного массива, а затем перебираю оставшийся элемент, чтобы связать пару. Таким образом, я не буду сочетать «красный» с «красным» и не буду создавать неупорядоченные дубликаты.