在PHP 中產生多個數組的笛卡爾積
簡介:
從多個數組生成組合是程式設計中的常見任務。這些數組的笛卡爾積是輸入數組中所有可能的元素組合的列表。
問題:
給定一個具有多個子數組的數組,我們想要產生一個表包含這些子數組中元素的所有唯一組合。例如,如果我們有兩個子數組:
$array[0][0] = 'apples'; $array[0][1] = 'pears'; $array[0][2] = 'oranges'; $array[1][0] = 'steve'; $array[1][1] = 'bob';
我們預期輸出為:
Array 0 Array 1 apples steve apples bob pears steve pears bob
解:笛卡爾積
此問題需要計算笛卡爾積,從多個陣列產生所有可能的元素組合。
實作:
計算笛卡爾積的一種方法涉及使用遞歸函數。這是一個範例實作:
function array_cartesian() { $_ = func_get_args(); if(count($_) == 0) return array(array()); $a = array_shift($_); $c = call_user_func_array(__FUNCTION__, $_); $r = array(); foreach($a as $v) foreach($c as $p) $r[] = array_merge(array($v), $p); return $r; }
此函數採用多個陣列作為輸入。它迭代第一個數組並將其每個元素與其餘數組的所有可能組合組合起來。結果是所有唯一組合的清單。
範例:
讓我們將解決方案應用於我們的範例:
$cross = array_cartesian( array('apples', 'pears', 'oranges'), array('steve', 'bob') ); print_r($cross);
這將輸出:
Array ( [0] => Array ( [0] => apples [1] => steve ) [1] => Array ( [0] => apples [1] => bob ) [2] => Array ( [0] => pears [1] => steve ) [3] => Array ( [0] => pears [1] => bob ) )
這符合我們的預期輸出。
以上是如何在 PHP 中產生多個數組的笛卡爾積?的詳細內容。更多資訊請關注PHP中文網其他相關文章!