首頁 >後端開發 >php教程 >如何在保留鍵值對的同時計算 PHP 關聯數組的笛卡爾積?

如何在保留鍵值對的同時計算 PHP 關聯數組的笛卡爾積?

Patricia Arquette
Patricia Arquette原創
2024-12-27 01:40:11748瀏覽

How to Compute the Cartesian Product of PHP Associative Arrays While Preserving Key-Value Pairs?

使用PHP 關聯數組尋找笛卡爾積,保留鍵值對

給定一個具有多個代表不同屬性的子數組的關聯數組,任務是計算笛卡爾積,同時保留密鑰及其對應的

基本原理

對於有N 個子數組的數組$input,其中每個子數組有Cn 個元素,我們可以繼續歸納:

  • 對於N = 1,笛卡爾積就是輸入數組
  • 假設我們有前N-1 個子數組的笛卡爾積,我們可以用以下方式計​​算第 N個子數組的乘積:

    • 產品中的每個項目(數組),添加KN => 對VN,1.
    • 對於VN,2 到VN,CN 的每個值,將每個項目的副本加到產品中,將KN 的值變更為VN,m(對於所有2 ≤ m ≤ CN).

代碼

function cartesian($input) {
    $result = [];

    while (list($key, $values) = each($input)) {
        if (empty($values)) {
            continue;
        }

        if (empty($result)) {
            foreach ($values as $value) {
                $result[] = [$key => $value];
            }
        } else {
            $append = [];

            foreach ($result as &$product) {
                $product[$key] = array_shift($values);
                $copy = $product;

                foreach ($values as $item) {
                    $copy[$key] = $item;
                    $append[] = $copy;
                }

                array_unshift($values, $product[$key]);
            }

            $result = array_merge($result, $append);
        }
    }

    return $result;
}

用法

$input = [
    'arm' => ['A', 'B', 'C'],
    'gender' => ['Female', 'Male'],
    'location' => ['Vancouver', 'Calgary'],
];

print_r(cartesian($input));

用法

Array
(
    [0] => Array
        (
            [arm] => A
            [gender] => Female
            [location] => Vancouver
        )

    [1] => Array
        (
            [arm] => A
            [gender] => Female
            [location] => Calgary
        )

    [2] => Array
        (
            [arm] => A
            [gender] => Male
            [location] => Vancouver
        )

...etc.

用法

用法

用法

用法

將輸出所需的笛卡爾積,保留鍵和值:

以上是如何在保留鍵值對的同時計算 PHP 關聯數組的笛卡爾積?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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