首頁 > 後端開發 > php教程 > 如何在 PHP 中產生多個數組的笛卡爾積,同時消除重複?

如何在 PHP 中產生多個數組的笛卡爾積,同時消除重複?

DDD
發布: 2024-11-26 03:19:09
原創
234 人瀏覽過

How can I generate the Cartesian product of multiple arrays in PHP while eliminating repetitions?

在PHP 中計算多個陣列的笛卡爾積

問題:

給定多個PHP數組,我們如何產生一個笛卡爾積,將每個數組中所有可能的元素組合組合起來數組,排除重複?

解:

要在 PHP 取得笛卡兒積,我們可以定義一個名為 array_cartesian 的遞歸函數。此函數採用輸入數組的數組作為參數。基本情況發生在數組數量為零時,在這種情況下,會傳回數組內的空數組。否則,函數使用 array_shift 函數從列表中刪除第一個數組,然後用剩餘的數組遞歸地呼叫自身。

對於第一個數組中的每個元素 v,函數迭代每個子數組p 是剩餘數組的笛卡爾積。然後,它透過合併 v 和 p 來建構一個新的子數組,並將該子數組加入到生成的笛卡爾積中。

範例:

考慮下列集合陣列:
$array[0][0] = 'apples';
$array[0][1] = 'pears';
$array[0][2] = 'oranges';

$array[1][0] = 'steve';
$array[1][1] = 'bob';
登入後複製

透過這些陣列傳遞給 array_cartesian函數,我們可以得到笛卡爾積:
$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
        )

    [4] => Array
        (
            [0] => oranges
            [1] => steve
        )

    [5] => Array
        (
            [0] => oranges
            [1] => bob
        )

)
登入後複製

因此,該函數有效地從輸入數組產生元素的所有唯一組合。

以上是如何在 PHP 中產生多個數組的笛卡爾積,同時消除重複?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板