我有一个带空格的字符串。我需要拆分(爆炸)它并从中获取序列的所有变体。例如:
string1 string2 string3
我需要解析它并获得这样的输出:
string1 string2 string3 string1 string3 string2 string2 string1 string3 string2 string3 string1 string3 string2 string1 string3 string1 string2
最有效的方法是什么?
编辑:实际上我需要解析最多3个字符串。所以我这样做并不是一个很好的方式(硬编码):
$exploded_query = explode(' ', $query); if(count($exploded_query) == 2) { //2 variants } if(count($exploded_query) == 3) { //6 variants }
所以我正在寻找一些漂亮的方法来做到这一点。
答案 0 :(得分:1)
这是数组的排列
看这里 - > Finding All Permutations of an Array,这对你有帮助。
答案 1 :(得分:0)
我绝不认为这是有效或最佳的。那里有更好的解决方案。但这只是你问题的直接答案。如果你想删除一些膨胀(代价可能是一点性能),你可以用{:
替换getRemainingWords
函数调用
$index = 0;
array_values(array_filter($words, function($key, &$index) { return !($key == $index++); }));
否则,这是
function getPossibleCombinations($words) {
$combinations = array();
$count = count($words);
// Base case: if there's only 1 word, there's only one combination
if ($count == 1) {
return array($words);
}
// Otherwise, loop over each words
foreach ($words as $key=>$word) {
// For each item, get all of the remaining items in the array (all except the current one)
$otherWords = getRemainingWords($words, $key);
// And recursively permute them
$otherCombinations = getPossibleCombinations($otherWords);
foreach ($otherCombinations as $otherCombination) {
$combinations[] = array_merge(array($word), $otherCombination);
}
}
return $combinations;
}
function getRemainingWords($array, $index) {
$results = array();
foreach ($array as $key=>$value) {
if ($key == $index) {
continue;
}
$results[] = $value;
}
return $results;
}