首頁 >後端開發 >php教程 >如何從多個不同長度的 PHP 陣列中有效地產生所有可能的元素組合?

如何從多個不同長度的 PHP 陣列中有效地產生所有可能的元素組合?

Susan Sarandon
Susan Sarandon原創
2024-12-12 10:33:11633瀏覽

How can I efficiently generate all possible combinations of elements from multiple PHP arrays of varying lengths?

產生多個PHP 陣列中項目的組合

處理多個不同長度的陣列時,產生所有可能的組合變得具有挑戰性他們的元素。本文解決了這個問題,提供了一個通用的 PHP 解決方案。

任務是建立一個函數,該函數接受任意數量的陣列並輸出一個包含其元素的所有可能組合的陣列。例如,給定三個陣列:

$arrayA = array('A1', 'A2', 'A3');
$arrayB = array('B1', 'B2', 'B3');
$arrayC = array('C1', 'C2');

所需的輸出將是18 個組合的陣列:

[
    ['A1', 'B1', 'C1'],
    ['A1', 'B1', 'C2'],
    ['A1', 'B2', 'C1'],
    ['A1', 'B2', 'C2'],
    ['A1', 'B3', 'C1'],
    ['A1', 'B3', 'C2'],
    ['A2', 'B1', 'C1'],
    ['A2', 'B1', 'C2'],
    ['A2', 'B2', 'C1'],
    ['A2', 'B2', 'C2'],
    ['A2', 'B3', 'C1'],
    ['A2', 'B3', 'C2'],
    ['A3', 'B1', 'C1'],
    ['A3', 'B1', 'C2'],
    ['A3', 'B2', 'C1'],
    ['A3', 'B2', 'C2'],
    ['A3', 'B3', 'C1'],
    ['A3', 'B3', 'C2'],
]

解決方案採用遞歸方法:

function combinations($arrays, $i = 0) {
    if (!isset($arrays[$i])) {
        return array();
    }
    if ($i == count($arrays) - 1) {
        return $arrays[$i];
    }

    // get combinations from subsequent arrays
    $tmp = combinations($arrays, $i + 1);

    $result = array();

    // concat 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;
}

函數接受數組數組作為輸入,並將遞歸計數器$i 初始化為零。它檢查索引 $i 處的目前數組是否存在,如果不存在則傳回空數組。如果 $i 等於最後一個索引,則表示基本情況,並傳回目前陣列。

否則,它遞歸呼叫組合以獲得後續數組的組合,儲存在 $tmp 中。它初始化一個空的 $result 數組並迭代索引 $i 處的目前數組。對於此數組中的每個元素,它將其與 $tmp 中的每個組合連接起來,將結果附加到 $result。

此過程遞歸展開,直到產生所有組合。傳回結果數組,表示輸入數組中項目的所有可能組合。

以上是如何從多個不同長度的 PHP 陣列中有效地產生所有可能的元素組合?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn