PHP中数组的所有字符串变体

时间:2013-04-09 12:57:48

标签: php string text-parsing

我有一个带空格的字符串。我需要拆分(爆炸)它并从中获取序列的所有变体。例如:

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
}

所以我正在寻找一些漂亮的方法来做到这一点。

2 个答案:

答案 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;
}