Что мне нужно
Мне нужны все возможные пары из n элементов без дубликатов. Скажем, я имею эти массивы:Получите все возможные пары n элементов без дубликатов с PHP
$arr1 = [2, 4, 6, 7];
$arr2 = [6, 5, 4, 11];
$arr3 = [22, 1, 5, 8];
$final = [
'a' => $arr1,
'b' => $arr2,
'c' => $arr3
];
Что теперь мне нужно:
$pairs = [
'ab' => [$arr1, $arr2],
'ac' => [$arr1, $arr3],
'bc' => [$arr2, $arr3]
];
То, что я получил
Я пришел до этого момента:
function getPairs($array) {
$n = count($array);
$finalArray = [];
$i = 0;
foreach ($array as $a) {
for ($x = $n-1; 0 <= $x; $x--) {
if ($i != $x) {
$finalArray[] = [$array[$i], $array[$x]];
}
}
$i++;
}
return $finalArray;
}
И тогда :
$arr1 = [2, 4, 6, 7];
$arr2 = [6, 5, 4, 11];
$arr3 = [22, 1, 5, 8];
$merged = [$arr1, $arr2, $arr3];
$pairs = getPairs($merged);
Есть две проблемы с моим подходом:
- Цикл производит
$x = 0
,$i = 1
и позже$i = 1
,$x = 0
, что приводит и дублированный массив. - Я не получаю ключи (
ab
,ac
,cb
) с этим.
похож на этот вопрос, но с ключами массива: Get all the combinations of N elements of multidimensional array
«всегда гарантирует, что один член пары всегда имеет« нижний »ключ». Это был недостающий кусок. Большое спасибо, ты потрясающий! – Julian