【发布时间】:2019-11-07 13:25:56
【问题描述】:
我的数据排列/组合
$combinations = [[]];
$data = [
['alteration1', 'alteration2', 'alteration3', 'alteration4' ... upto 5 each],
['alteration1', 'alteration5', 'alteration6', 'alteration7' ... upto 5 each],
['alteration8', 'alteration9', 'alteration10', 'alteration5' ... upto 5 each],
... upto 6 max
];
$length = count($data);
for ($count = 0; $count < $length; $count++) {
$tmp = [];
foreach ($combinations as $v1) {
foreach ($data[$count] as $v2)
$tmp[] = array_merge($v1, [$v2]);
}
$combinations = $tmp;
}
print_r($combinations);
脚本会生成这样的集合
0 => array:3 [▼
0 => "alteration1"
1 => "alteration1"
2 => "alteration8"
]
1 => array:3 [▼
0 => "alteration1"
1 => "alteration1"
2 => "alteration9"
]
...当我开始在我的案例中获取相同的数据序列时,问题就开始了,数组索引 0 和 20 将完全相同,尽管有任何位置。
20 => array:3 [▼
0 => "alteration8"
1 => "alteration1"
2 => "alteration1"
]
21 => array:3 [▼
0 => "alteration1"
1 => "alteration9"
2 => "alteration1"
]
$final = []; // remove duplicates
基本思想是保持 $combinations 数组的唯一性 (alteration1,alteration2,alteration3) 等于 (alteration3,alteration1,alteration2) 否则它应该在 $final 数组中被跳过。我还没有在 SO 和谷歌周围找到任何东西。谢谢您的帮助。 $data 维度[从1-6],里面的每个数组可以是[1-6]。以下脚本可能无法按预期工作。
http://sandbox.onlinephpfunctions.com/code/3ad5084386c2185f7619aaac152b638873039ee8
【问题讨论】:
-
什么可能重复?
-
(alteration1,alteration2,alteration3) 等于 (alteration3,alteration1,alteration2) f.e 任何重复的相同组合,简化的 ABC = BCA = CBA 应该检查最多 6 个元素(并且只返回 1 )位置无所谓
标签: php multidimensional-array permutation