ホームページ > バックエンド開発 > PHPチュートリアル > さまざまな長さの複数の PHP 配列から要素の考えられるすべての組み合わせを効率的に生成するにはどうすればよいですか?

さまざまな長さの複数の PHP 配列から要素の考えられるすべての組み合わせを効率的に生成するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-12 10:33:11
オリジナル
632 人が閲覧しました

How can I efficiently generate all possible combinations of elements from multiple PHP arrays of varying lengths?

複数の PHP 配列内の項目の組み合わせの生成

さまざまな長さの複数の配列を扱う場合、考えられるすべての組み合わせを生成するのは困難になります。彼らの要素。この記事では、この問題に対処し、汎用性の高い PHP ソリューションを提供します。

このタスクは、任意の数の配列を受け入れ、それらの要素の可能なすべての組み合わせを含む配列を出力する関数を作成することです。たとえば、次の 3 つの配列があるとします:

$arrayA = array('A1', 'A2', 'A3');
$arrayB = array('B1', 'B2', 'B3');
$arrayC = array('C1', 'C2');
ログイン後にコピー

必要な出力は 18 個の組み合わせの配列になります:

[
    ['A1', 'B1', 'C1'],
    ['A1', 'B1', 'C2'],
    ['A1', 'B2', 'C1'],
    ['A1', 'B2', 'C2'],
    ['A1', 'B3', 'C1'],
    ['A1', 'B3', 'C2'],
    ['A2', 'B1', 'C1'],
    ['A2', 'B1', 'C2'],
    ['A2', 'B2', 'C1'],
    ['A2', 'B2', 'C2'],
    ['A2', 'B3', 'C1'],
    ['A2', 'B3', 'C2'],
    ['A3', 'B1', 'C1'],
    ['A3', 'B1', 'C2'],
    ['A3', 'B2', 'C1'],
    ['A3', 'B2', 'C2'],
    ['A3', 'B3', 'C1'],
    ['A3', 'B3', 'C2'],
]
ログイン後にコピー

ソリューションは再帰的アプローチを採用します:

function combinations($arrays, $i = 0) {
    if (!isset($arrays[$i])) {
        return array();
    }
    if ($i == count($arrays) - 1) {
        return $arrays[$i];
    }

    // get combinations from subsequent arrays
    $tmp = combinations($arrays, $i + 1);

    $result = array();

    // concat each array from tmp with each element from $arrays[$i]
    foreach ($arrays[$i] as $v) {
        foreach ($tmp as $t) {
            $result[] = is_array($t) ?
                array_merge(array($v), $t) :
                array($v, $t);
        }
    }

    return $result;
}
ログイン後にコピー

この関数は配列の配列を入力として受け取り、再帰カウンター $i をゼロに初期化します。インデックス $i にある現在の配列が存在するかどうかを確認し、存在しない場合は空の配列を返します。 $i が最後のインデックスと等しい場合、基本ケースを意味し、現在の配列が返されます。

それ以外の場合は、組み合わせを再帰的に呼び出して、$tmp に格納されている後続の配列の組み合わせを取得します。空の $result 配列を初期化し、インデックス $i で現在の配列を反復処理します。この配列内の各要素について、$tmp の各組み合わせと連結し、結果を $result に追加します。

このプロセスは、すべての組み合わせが生成されるまで再帰的に展開されます。結果の配列が返され、入力配列内の項目の可能なすべての組み合わせを表します。

以上がさまざまな長さの複数の PHP 配列から要素の考えられるすべての組み合わせを効率的に生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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