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

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

Barbara Streisand
Barbara Streisand原創
2024-12-26 13:58:13625瀏覽

How to Calculate the Cartesian Product of PHP Associative Arrays while Preserving Keys?

使用 PHP關聯數組尋找笛卡爾積


給定一個關聯數組,可以在保留其鍵的同時確定其笛卡爾積並在內部利用它們

方法論

我們可以用歸納法來解決這個問題:



  1. 對於單一數組,笛卡爾積是一系列具有表示原始數組中每個項目的單一鍵值對的數組。



  2. 假設前N-1 個陣列的乘積已知,加入第N個陣列涉及:



  3. 對於每個現有產品,附加一個包含第N 個陣列的鍵和第 N個陣列的第一個值的元素




重複這些步驟可確保獲得 N 個陣列的乘積。


實作


功能cartesian($input) {<pre class="brush:php;toolbar:false">$result = array();

foreach ($input as $key => $values) {
    if (empty($values)) {
        continue;
    }

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

        foreach($result as &amp;$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 = array(<pre class="brush:php;toolbar:false">'arm' => array('A', 'B', 'C'),
'gender' => array('Female', 'Male'),
'location' => array('Vancouver', 'Calgary'),

);

print_r(笛卡爾($input));



陣列<br>(<pre class="brush:php;toolbar:false">[0] => Array
    (
        [arm] => A
        [gender] => Female
        [location] => Vancouver
    )

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

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

...等

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

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