考虑以下数组:
$a = [['x'], ['y', 'z', 'w'], ['m', 'n']];
Run Code Online (Sandbox Code Playgroud)
如何从中生成以下数组:
$output=[
[[x][y][m]],
[[x][z][n]],
[[x][w][m]],
[[x][y][n]],
[[x][z][m]],
[[x][w][n]],
];
Run Code Online (Sandbox Code Playgroud)
我正在寻找比我更有效的代码.(我目前的代码如下所示)
我看到这个算法将采用数字或单词并找到所有可能的组合
我正在使用它,但它不会返回所有"真正的"组合.
PHP:
<?php
require_once 'Math/Combinatorics.php';
$words = array('cat', 'dog', 'fish');
$combinatorics = new Math_Combinatorics;
foreach($combinatorics->permutations($words, 2) as $p) {
echo join(' ', $p), "\n";
}
?>
Run Code Online (Sandbox Code Playgroud)
它返回:
cat dog
dog cat
cat fish
fish cat
dog fish
fish dog
Run Code Online (Sandbox Code Playgroud)
但这些都不是真正的组合,所有真正的组合也包括这些:
cat cat
dog dog
fish fish
Run Code Online (Sandbox Code Playgroud)
这就是我需要的,获得所有真实组合的方法:
cat dog
dog cat
cat fish
fish cat
dog fish
fish dog
cat cat
dog dog
fish fish
Run Code Online (Sandbox Code Playgroud) php algorithm combinations combinatorics discrete-mathematics