ホームページ >バックエンド開発 >PHPチュートリアル >PHP で繰り返しを排除しながら複数の配列のデカルト積を生成するにはどうすればよいですか?

PHP で繰り返しを排除しながら複数の配列のデカルト積を生成するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-26 03:19:09229ブラウズ

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 中国語 Web サイトの他の関連記事を参照してください。

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