【问题标题】:Permutations by group按组排列
【发布时间】:2014-04-05 12:40:36
【问题描述】:

我需要组合一些元素。

我有什么:

Array
(
    [0] => Array
        (
            [0] => n
            [1] => q
        )

    [1] => Array
        (
            [0] => d
            [1] => g
        )
)

我需要什么:

n d
n g
q d
q g

我该如何存档?

如您所见,有两组。但这将是动态的。它可以是任意数量的组,也可以是任意数量的元素。

例如:

Array
(
    [0] => Array
        (
            [0] => n
            [1] => q
            [2] => x
            [3] => b
        )

    [1] => Array
        (
            [0] => d
            [1] => g
            [2] => q
            [3] => w
        )

    [2] => Array
        (
            [0] => x
            [1] => y
            [2] => a
            [3] => c
        )
)

只是一个例子,因为有很多:

n d x
n g y
n q a
n w c

n d y
n g a
n q c
n w x

n d a
n g c
n q x
n w y

n d c
n g x
n q y
n w a

n g x
n q y
n w a
n d c

n g y
n q a
n w c
n d x

n g a
n q c
n w x
n d y

n g c
n q x
n w y
n d a 

Now we have to start with q to replace n, an so on.

我希望有人可以帮助我。

谢谢!

【问题讨论】:

  • 那么您对下一个案例的预期输出是什么?
  • 我已经更新了帖子。

标签: php arrays combinations permutation


【解决方案1】:

检查以下代码。它为您提供所需的所有排列。

<?php
//$arr = array(
//  array('a', 'b', 'c', 'd'),
//  array('e', 'f', 'g', 'h'),
//  array('p', 'q', 'r', 's')
//);
$arr = array(
    array('n', 'q'),
    array('d', 'g')
);

$permutations = $arr[0];

for ($i = 1; $i < count($arr); $i++)
{
    $inner_temp = array();
    for ($k = 0; $k < count($permutations); $k++)
    {
        for ($j = 0; $j < count($arr[$i]); $j++)
            array_push($inner_temp, $permutations[$k] . $arr[$i][$j]);
    }
    $permutations = $inner_temp;
}

echo "<pre>";
print_r($permutations);
?>

【讨论】:

  • 如果数组很大,我会内存不足。我什至允许 2gb :/
  • 嗯,这需要代码优化。你需要考虑一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-24
  • 1970-01-01
  • 1970-01-01
  • 2013-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多