在PHP 中從多個陣列產生組合
簡介
產生所有組合的任務在組合最佳化問題中經常遇到來自多個陣列的項目。本文提出了一種遞歸解決方案,解決了對可以處理可變數量來源數組的函數的需求。
問題陳述
給定幾個具有不同數量的數組elements,找到所有項目的組合,其中組合的數量等於每個數組中元素數量的乘積。例如,給定以下數組:
$arrayA = array('A1','A2','A3'); $arrayB = array('B1','B2','B3'); $arrayC = array('C1','C2');
我們的目標是產生 18種組合的陣列:
[ ['A1', 'B1', 'C1'], ['A1', 'B1', 'C2'], ['A1', 'B2', 'C1'], ... ]
遞歸解
以下遞歸函數產生所有可能的組合items:
function combinations($arrays, $i = 0) { // If reaching the last array, return the array itself if (!isset($arrays[$i])) { return array(); } // If at the parent array, return the recursive call to the following array if ($i == count($arrays) - 1) { return $arrays[$i]; } // Get combinations from subsequent arrays $tmp = combinations($arrays, $i + 1); $result = array(); // Concatenate each array from tmp with each element from $arrays[$i] foreach ($arrays[$i] as $v) { foreach ($tmp as $t) { $result[] = is_array($t) ? array_merge(array($v), $t) : array($v, $t); } } return $result; }
示範
以下程式碼示範了組合函數的用法:
print_r( combinations( array( array('A1','A2','A3'), array('B1','B2','B3'), array('C1','C2') ) ) );
這將輸出預期的陣列18種組合。
以上是如何在 PHP 中遞歸地從多個數組產生所有組合?的詳細內容。更多資訊請關注PHP中文網其他相關文章!