”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何从 PHP 中的一维数组生成所有可能的组合,包括组合和排列?

如何从 PHP 中的一维数组生成所有可能的组合,包括组合和排列?

发布于2024-11-18
浏览:728

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

在 PHP 中获取所有可能的组合:综合解决方案

从一维数组中检索所有可能的组合可能是一项复杂的任务,尤其是当考虑组合和排列。虽然解决这个问题有多种方法,但一种高效的解决方案涉及实现递归函数。

递归函数,深度_picker(),对数组执行深度优先搜索,探索所有分支并组合元素以形成组合。它维护一个临时字符串,该字符串会随着每个元素的变化而逐渐修改,而收集数组则存储最终的组合。让我们看看这个函数是如何运行的:

  1. 基本情况:如果临时字符串为空,则意味着正在考虑一个独立元素。在这种情况下,它被直接添加到收集数组中。
  2. 递归探索:当要组合一个元素时,该函数创建原始数组的副本并删除当前元素从它。然后,它在修改后的数组上递归调用 height_picker(),传递更新后的临时字符串和添加的元素。如果还有更多元素需要组合,则继续递归过程。
  3. 组合和排列:通过迭代每个元素并递归组合它们,深度_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
)

此方法提供了一种全面且高效的解决方案,用于获取数组中元素的所有可能组合,确保输出中包含组合和不同的排列。

最新教程 更多>
  • 如何在 Chrome DevTools 中访问 c​​hrome.storage.sync 数据?
    如何在 Chrome DevTools 中访问 c​​hrome.storage.sync 数据?
    在 Chrome DevTools 中访问 c​​hrome.storage.sync尽管 Chrome DevTools 中提供了本地存储和会话存储检查器,但用户经常遇到 chrome.storage.sync 缺少类似功能的情况。这可以通过替代方法解决。使用扩展程序进行 Chrome 存储检查存...
    编程 发布于2024-11-18
  • Scala Actor 可以替代 Go 的 Goroutine 进行库移植吗?
    Scala Actor 可以替代 Go 的 Goroutine 进行库移植吗?
    协程和 Actor:Go 和 Scala 的比较分析Actor 模型和 Goroutines 之间的相似之处让一些人质疑 Scala 是否可能是一种适合移植利用 Goroutines 的 Go 库的语言。然而,仔细检查就会发现这两个概念之间存在显着差异。协程:通信顺序进程 (CSP) 的基础Go 中...
    编程 发布于2024-11-18
  • 在 Go 中使用 WebSocket 进行实时通信
    在 Go 中使用 WebSocket 进行实时通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    编程 发布于2024-11-18
  • 如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    在 PHP 中组合关联数组在 PHP 中,将两个关联数组组合成一个数组是一项常见任务。考虑以下请求:问题描述:提供的代码定义了两个关联数组,$array1 和 $array2。目标是创建一个新数组 $array3,它合并两个数组中的所有键值对。 此外,提供的数组具有唯一的 ID,而名称可能重合。要求...
    编程 发布于2024-11-18
  • 大批
    大批
    方法是可以在对象上调用的 fns 数组是对象,因此它们在 JS 中也有方法。 slice(begin):将数组的一部分提取到新数组中,而不改变原始数组。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index p...
    编程 发布于2024-11-18
  • Python 的字符串连接优化适用于大字符串吗?
    Python 的字符串连接优化适用于大字符串吗?
    如何在 Python 中高效地将一个字符串附加到另一个字符串在 Python 中,使用 ' ' 运算符连接字符串是一项常见任务。虽然下面的代码很简单:var1 = "foo" var2 = "bar" var3 = var1 var2它提出...
    编程 发布于2024-11-18
  • 如何使用 PHP 的 `strtotime()` 和替代方案处理 1970 年之前的日期?
    如何使用 PHP 的 `strtotime()` 和替代方案处理 1970 年之前的日期?
    strtotime() 和 1970 年之前的日期由于范围有限,使用 strtotime() 处理 1970 年之前的日期可能会带来挑战。要解决此问题,请检查您的 PHP 版本和平台。如有必要,请考虑升级。或者,为了更灵活地处理更广泛的日期范围,请考虑使用 PHP 的 DateTime 对象。它们允...
    编程 发布于2024-11-18
  • 尽管代码有效,为什么 POST 请求无法捕获 PHP 中的输入?
    尽管代码有效,为什么 POST 请求无法捕获 PHP 中的输入?
    解决 PHP 中的 POST 请求故障在提供的代码片段中:action=''而不是:action="<?php echo $_SERVER['PHP_SELF'];?>";?>"检查 $_POST数组:表单提交后使用 var_dump 检查 $_POST 数...
    编程 发布于2024-11-18
  • 超越分析器:我们如何实现准确的性能优化?
    超越分析器:我们如何实现准确的性能优化?
    超越分析器:探索替代性能优化技术在他的演讲“性能焦虑”中,Joshua Bloch 强调了分析器的局限性及其潜在的不准确性。然而,这提出了一个问题:我们还有哪些其他选项来优化性能?我们应该回归我们的直觉和猜测吗?Bloch 引用的论文“评估 Java 分析器的准确性”中得出的结论是,分析器可能由于不...
    编程 发布于2024-11-18
  • Pandas 中的 inplace=True 真的值得冒险吗?
    Pandas 中的 inplace=True 真的值得冒险吗?
    在 Pandas 中,Inplace = True 被认为是有害的吗?简介:概念Pandas 中的“就地修改”长期以来一直是争论的话题。在本文中,我们将探讨为什么 inplace = False 是 Pandas 中的默认行为、何时考虑切换到 inplace = True 以及与其使用相关的潜在风险...
    编程 发布于2024-11-18
  • 如何避免 Lambda 函数中的参数修改导致意外结果
    如何避免 Lambda 函数中的参数修改导致意外结果
    Lambda 函数及其参数的范围Lambda 函数是匿名函数,可以捕获其封闭函数的范围。这允许他们从父作用域访问变量和参数。但是,当 lambda 函数使用在封闭函数内修改的参数时,此行为有时会导致意外结果。要说明此问题,请考虑以下代码:def callback(msg): print(ms...
    编程 发布于2024-11-18
  • 如何在 PHP 中从变量实例化类?
    如何在 PHP 中从变量实例化类?
    在 PHP 中从变量实现类实例化在 PHP 中,您可能会遇到需要从变量的值实例化类的场景。让我们用一个例子来说明这一点:$var = 'bar'; $bar = new {$var}Class('var for __construct()'); //$bar = new barClass('var ...
    编程 发布于2024-11-18
  • 如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    MySQL配置不正确:相对路径的问题在Django中运行python manage.py runserver时,可能会遇到以下错误:ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Library/Python/2.7/site-...
    编程 发布于2024-11-18
  • Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta:列偏移的删除和恢复Bootstrap 4 在其 Beta 1 版本中引入了重大更改柱子偏移了。然而,随着 Beta 2 的后续发布,这些变化已经逆转。从 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    编程 发布于2024-11-18
  • 我需要带有准备好的语句的“mysql_real_escape_string()”吗?
    我需要带有准备好的语句的“mysql_real_escape_string()”吗?
    准备好的语句是否需要 mysql_real_escape_string() 函数?当使用给定查询中的准备好的语句时:$sql = $db->prepare('select location from location_job where location like ?'); $sql->...
    编程 发布于2024-11-18

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3