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

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-15 14:03:03156ブラウズ

How to Generate Cartesian Products of Multiple Arrays in PHP?

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

次のような PHP 配列構造を考えてみましょう。

$array[0][0] = 'apples';
$array[0][1] = 'pears';
$array[0][2] = 'oranges';

$array[1][0] = 'steve';
$array[1][1] = 'bob';

目的: これらの配列から要素の可能なすべての組み合わせの表形式のリストを生成すること。 duplication.

解決策:

複数の配列から可能なすべての組み合わせを生成する概念は、「デカルト積」として知られています。 PHP でこれを実現するには、いくつかの方法があります。

1 つのアプローチは、PHP の配列関数を利用することです。次のコード スニペットは、func_get_args() と再帰を使用してデカルト積を実装します。

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')
);

結果は $cross に保存され、すべての可能な組み合わせを含む配列になります:

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 までご連絡ください。