我有一組串,每串具有可變數目的由管分離段(|
),例如:「展開」的字符串
$string = 'abc|b|ac';
與多於一個的字符的每個部分應被擴展爲所有可能的一個字符的組合,進行3段下面的 「算法」 工程奇妙:
$result = array();
$string = explode('|', 'abc|b|ac');
foreach (str_split($string[0]) as $i)
{
foreach (str_split($string[1]) as $j)
{
foreach (str_split($string[2]) as $k)
{
$result[] = implode('|', array($i, $j, $k)); // more...
}
}
}
print_r($result);
輸出:
$result = array('a|b|a', 'a|b|c', 'b|b|a', 'b|b|c', 'c|b|a', 'c|b|c');
顯然,對於3個以上的段,代碼開始變得非常混亂,因爲我需要添加(並檢查)越來越多的內部循環。我試圖想出一個動態解決方案,但我無法弄清楚如何爲所有細分(單獨和整體)生成正確的組合。我還查看了一些combinatorics源代碼,但我無法將我的段的不同組合組合起來。
我很感激任何人都可以指出我正確的方向。
訂單有多重要?或者你只需要生成所有組合即可? – NullUserException
@NullUserException:每個段的順序都很關鍵,只要沒有重複的c生成,每個字符在該段中出現的順序就是不相關的。 –