ホームページ >バックエンド開発 >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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。