首頁 > 後端開發 > php教程 > 如何在 PHP 中產生多個數組的笛卡爾積?

如何在 PHP 中產生多個數組的笛卡爾積?

Patricia Arquette
發布: 2024-11-12 10:40:02
原創
953 人瀏覽過

How to Generate the Cartesian Product of Multiple Arrays in PHP?

在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中文網其他相關文章!

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