PHP:如何获得一维数组的所有可能组合? [复制]

Posted

技术标签:

【中文标题】PHP:如何获得一维数组的所有可能组合? [复制]【英文标题】:PHP: How to get all possible combinations of 1D array? [duplicate] 【发布时间】:2012-06-05 18:10:12 【问题描述】:

可能重复:algorithm that will take numbers or words and find all possible combinationsCombinations, Dispositions and Permutations in php

我已经阅读/尝试了很多关于 SO 的建议答案,但没有一个能解决问题

$array = array('Alpha', 'Beta', 'Gamma');

如何获得所有可能的组合?

预期输出:

array('Alpha',
      'Beta',
      'Gamma',
      'Alpha Beta',
      'Alpha Gamma',
      'Beta Alpha',
      'Beta Gamma',
      'Gamma Alpha',
      'Gamma Beta',
      'Alpha Beta Gamma',
      'Alpha Gamma Beta',
      'Beta Alpha Gamma',
      'Beta Gamma Alpha',
      'Gamma Alpha Beta',
      'Gamma Beta Alpha')

注意:我正在寻找的答案应该包括所有组合和所有不同的安排。例如:'Alpha Beta''Beta Alpha' 是 2 个不同的字符串,都应该在输出数组中。

提前致谢

【问题讨论】:

@Juhana OP 也想要的单字 你能分解数组,使用 foreach 和总数并循环遍历它们吗? @Juhana 请不要关闭问题,其他问题可能类似,但不一样 您的尝试中究竟有什么不奏效的?你可以从那里开始。 @evilReiko 副本没有重复元素。 【参考方案1】:

我相信你的教授会对这个解决方案更满意:

<?php

$array = array('Alpha', 'Beta', 'Gamma', 'Sigma');

function depth_picker($arr, $temp_string, &$collect) 
    if ($temp_string != "") 
        $collect []= $temp_string;

    for ($i=0, $iMax = sizeof($arr); $i < $iMax; $i++) 
        $arrcopy = $arr;
        $elem = array_splice($arrcopy, $i, 1); // removes and returns the i'th element
        if (sizeof($arrcopy) > 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
)

【讨论】:

我知道我的问题听起来像是一项家庭作业,但事实并非如此!哈哈!我知道解决方案隐藏在递归中,但我一点也不擅长。完美答案,值得一枚奖牌! 感谢 broseph 对我来说意义重大。请问如果不做作业,它是用来做什么的:)? 这段代码是改进我的网站搜索引擎的关键,它可以为用户推荐“熟悉”的关键字 您可以通过将 temp_string 作为可选参数来稍微改进您的功能。 我收到了Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 33554440 bytes)->3v4l.org/iUCk4

以上是关于PHP:如何获得一维数组的所有可能组合? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何获得多个列表的所有可能组合? [复制]

Presto SQL - 如何获得数组的所有可能组合?

如何获得二维数组可能的组合

在 PHP 中,是不是可以使用 PDO 获取一维数组? [复制]

如何从二维数组中获取一维列数组和一维行数组? (C#.NET)

如何在没有顺序重复的情况下获得 PHP 中的所有排列?