「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > PHP で 1D 配列から、組み合わせと順列の両方を含むすべての可能な組み合わせを生成するにはどうすればよいですか?

PHP で 1D 配列から、組み合わせと順列の両方を含むすべての可能な組み合わせを生成するにはどうすればよいですか?

2024 年 11 月 18 日に公開
ブラウズ:482

How can I generate all possible combinations from a 1D array in PHP, including both combinations and permutations?

PHP ですべての可能な組み合わせを取得する: 包括的なソリューション

1D 配列からすべての可能な組み合わせを取得することは、特に次の場合に複雑なタスクになる可能性があります。組み合わせと順列の両方を考慮します。この問題にはさまざまなアプローチがありますが、非常に効果的な解決策の 1 つは、再帰関数の実装です。

再帰関数 Depth_picker() は、配列に対して深さ優先検索を実行し、すべての分岐を探索し、要素を結合して形成します。組み合わせ。これは各要素で徐々に変更される一時的な文字列を維持し、収集配列は最終的な組み合わせを保存します。この関数がどのように動作するかを調べてみましょう:

  1. Base Case: 一時文字列が空の場合、スタンドアロン要素が考慮されていることを意味します。この場合、収集配列に直接追加されます。
  2. 再帰探索: 要素が結合されるとき、関数は元の配列のコピーを作成し、現在の要素を削除します。それから。次に、変更された配列に対して Depth_picker() を再帰的に呼び出し、追加された要素を含む更新された一時文字列を渡します。組み合わせる要素がさらにある場合は、再帰的なプロセスが続行されます。
  3. 組み合わせと順列: 各要素を反復処理し、それらを再帰的に組み合わせることで、 Depth_picker() は可能なすべての組み合わせと順列を効果的に生成します。繰り返しなしで。このアプローチにより、文字列の両方のバリエーション ('Alpha Beta' と 'Beta Alpha') が最終出力に確実に含まれるようになります。
  4. 最終結果: 関数がすべての組み合わせを探索すると、収集配列には、入力配列からのすべての可能な組み合わせの完全なセットが含まれています。

実装と実行

この深さ優先検索と組み合わせの取得を実装するには、次の PHP コードを使用できます:

 0) {
            depth_picker($arrcopy, $temp_string ." " . $elem[0], $collect);
        } else {
            $collect []= $temp_string. " " . $elem[0];
        }
    }
}

$collect = array();
depth_picker($array, "", $collect);
print_r($collect);

?>

実行すると、このコードは、可能なすべての組み合わせと配置の次の配列を出力します:

Array
(
    [0] =>  Alpha
    [1] =>  Alpha Beta
    [2] =>  Alpha Beta Gamma
    [3] =>  Alpha Beta Gamma Sigma
    [4] =>  Alpha Beta Sigma
    [5] =>  Alpha Beta Sigma Gamma
    [6] =>  Alpha Gamma
    [7] =>  Alpha Gamma Beta
    [8] =>  Alpha Gamma Beta Sigma
    [9] =>  Alpha Gamma Sigma
    [10] =>  Alpha Gamma Sigma Beta
    [11] =>  Alpha Sigma
    [12] =>  Alpha Sigma Beta
    [13] =>  Alpha Sigma Beta Gamma
    [14] =>  Alpha Sigma Gamma
    [15] =>  Alpha Sigma Gamma Beta
    [16] =>  Beta
    [17] =>  Beta Alpha
    [18] =>  Beta Alpha Gamma
    [19] =>  Beta Alpha Gamma Sigma
    [20] =>  Beta Alpha Sigma
    [21] =>  Beta Alpha Sigma Gamma
    [22] =>  Beta Gamma
    [23] =>  Beta Gamma Alpha
    [24] =>  Beta Gamma Alpha Sigma
    [25] =>  Beta Gamma Sigma
    [26] =>  Beta Gamma Sigma Alpha
    [27] =>  Beta Sigma
    [28] =>  Beta Sigma Alpha
    [29] =>  Beta Sigma Alpha Gamma
    [30] =>  Beta Sigma Gamma
    [31] =>  Beta Sigma Gamma Alpha
    [32] =>  Gamma
    [33] =>  Gamma Alpha
    [34] =>  Gamma Alpha Beta
    [35] =>  Gamma Alpha Beta Sigma
    [36] =>  Gamma Alpha Sigma
    [37] =>  Gamma Alpha Sigma Beta
    [38] =>  Gamma Beta
    [39] =>  Gamma Beta Alpha
    [40] =>  Gamma Beta Alpha Sigma
    [41] =>  Gamma Beta Sigma
    [42] =>  Gamma Beta Sigma Alpha
    [43] =>  Gamma Sigma
    [44] =>  Gamma Sigma Alpha
    [45] =>  Gamma Sigma Alpha Beta
    [46] =>  Gamma Sigma Beta
    [47] =>  Gamma Sigma Beta Alpha
    [48] =>  Sigma
    [49] =>  Sigma Alpha
    [50] =>  Sigma Alpha Beta
    [51] =>  Sigma Alpha Beta Gamma
    [52] =>  Sigma Alpha Gamma
    [53] =>  Sigma Alpha Gamma Beta
    [54] =>  Sigma Beta
    [55] =>  Sigma Beta Alpha
    [56] =>  Sigma Beta Alpha Gamma
    [57] =>  Sigma Beta Gamma
    [58] =>  Sigma Beta Gamma Alpha
    [59] =>  Sigma Gamma
    [60] =>  Sigma Gamma Alpha
    [61] =>  Sigma Gamma Alpha Beta
    [62] =>  Sigma Gamma Beta
    [63] =>  Sigma Gamma Beta Alpha
)

このアプローチは、配列内の要素の可能なすべての組み合わせを取得するための包括的かつ効率的なソリューションを提供し、組み合わせと異なる配置の両方が出力に含まれることを保証します。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3