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

Patricia Arquette
リリース: 2024-11-15 14:03:03
オリジナル
155 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート