【问题标题】:PHP advanced array combinationsPHP 高级数组组合
【发布时间】:2014-02-28 12:40:32
【问题描述】:

我很难在这里解释我想要什么。所以我将尝试用一些代码来解释它:

// Example 1

$numbers = [1,2,3,4,5,6];

$in_each = 2;

$combinations = superFunction($numbers, $in_each);

// Result

$combinations = [
    [
        [1,2],
        [3,4],
        [5,6]
    ],
    [
        [1,3],
        [2,4],
        [5,6]
    ],
    [
        [1,4],
        [2,3],
        [5,6]
    ]
    // and so on
];


// Example 2

$numbers = [1,2,3,4,5,6];

$in_each = 3;

$combinations = superFunction($numbers, $in_each);

// Result

$combinations = [
    [
        [1,2,3],
        [4,5,6]
    ],
    [
        [1,2,4],
        [3,5,6]
    ]
    // and so on
];

这是我需要帮助创建的superFunction。注意变量 $in_each 是这里的关键。

该功能不需要超级高效,甚至不需要故障安全。我只是需要一些东西让我开始。

我在这里看到了许多不同的“数组组合”脚本,但没有一个可以像这样“分组”选项。

【问题讨论】:

  • 为什么不使用现有的组合脚本之一,然后使用array_chunk()遍历生成的数组
  • 你想拥有所有可用的组合还是只保留第一个/第二个数字?
  • 我无法理解您的组合是如何拆分为数组的。很明显,每个k 都是C(n,k) - 但是它们如何在第一级结果数组中拆分?

标签: php


【解决方案1】:

编辑:我以前不知道这一点,但array_chunk 会做你想做的事,而无需努力制作函数。没有意识到它的存在。看起来就像array_chunk($numbers, $in_each); 一样简单

array_slice 函数可能会帮助你做你想做的事。我很确定您只想将 $numbers 数组拆分为由 $in_each 变量确定的相等部分。

这是一个简单的例子:

$numbers = [1,2,3,4,5,6]
$in_each = 2;
$combinations = array_slice($nums, 0, 0 + $in_each);

如果此时您打印出$combinations,您将得到以下结果:

Array
(
  [0] => 1
  [1] => 2
)

所以,我只需将superFunction 设置为一个循环,该循环执行array_slice n 次,其中nlength of $numbers 除以$in_eachn 也会从零上升,无论您的 $in_each 变量有多大。在这种情况下,n 会像这样计算:0 2 4

【讨论】:

    猜你喜欢
    • 2016-10-19
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    • 2011-04-14
    • 2010-09-18
    相关资源
    最近更新 更多