ホームページ  >  記事  >  バックエンド開発  >  PHPで複数の配列のデカルト積を生成するにはどうすればよいですか?

PHPで複数の配列のデカルト積を生成するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-12 10:40:02876ブラウズ

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

PHP で複数の配列のデカルト積を生成する

はじめに:
複数の配列から組み合わせを生成するのはプログラミングにおける一般的なタスク。これらの配列のデカルト積は、入力配列の要素の可能なすべての組み合わせのリストです。

問題:
複数の部分配列を持つ配列が与えられた場合、テーブルを生成したいと考えています。これらのサブ配列の要素の一意の組み合わせがすべて含まれます。たとえば、2 つの部分配列がある場合:

$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

解: デカルト積
この問題には次のものが必要です。デカルト積を計算します。これにより、複数の配列から要素の可能なすべての組み合わせが生成されます。

実装:
デカルト積を計算する 1 つのアプローチには、再帰関数の使用が含まれます。以下に実装例を示します。

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

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