【问题标题】:PHP Clean Up Permutated ArrayPHP清理排列数组
【发布时间】:2009-12-07 18:30:27
【问题描述】:

大家好,基本上,我有一个数组:

array('a', 'b', 'c');

现在我通过一个数组置换函数运行它,结果是:

Array
(
    [0] => Array
        (
            [0] => C
        )

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

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

    [3] => Array
        (
            [0] => C
            [1] => B
        )

    [4] => Array
        (
            [0] => A
        )

    [5] => Array
        (
            [0] => A
            [1] => C
        )

    [6] => Array
        (
            [0] => C
            [1] => A
        )

    [7] => Array
        (
            [0] => A
            [1] => B
        )

    [8] => Array
        (
            [0] => B
            [1] => A
        )

    [9] => Array
        (
            [0] => A
            [1] => B
            [2] => C
        )

    [10] => Array
        (
            [0] => A
            [1] => C
            [2] => B
        )

    [11] => Array
        (
            [0] => B
            [1] => A
            [2] => C
        )

    [12] => Array
        (
            [0] => B
            [1] => C
            [2] => A
        )

    [13] => Array
        (
            [0] => C
            [1] => A
            [2] => B
        )

    [14] => Array
        (
            [0] => C
            [1] => B
            [2] => A
        )

)

现在我的问题是,我怎样才能清理该数组以便:

array ( C, B )
is the same as
array ( B, C )

它会删除第二个数组

我该怎么做?

编辑...根据您的答案进行一些研究后,这就是我想出的:

array_walk($array, 'sort');
$array = array_unique($array);

sort($array); // not necessary

【问题讨论】:

  • 为什么不能只用组合函数代替排列函数?
  • 因为我没有写置换函数,因为算法让我感到困惑:P

标签: php arrays permutation


【解决方案1】:

sort组成数组:

foreach ($arrays AS &$arr)
{
   sort($arr);
}

所以 {"C", "B"} 变成 => {"B", "C"}
{"B", "C"} 变成 => {"B", "C"}

它们是相同的。

【讨论】:

【解决方案2】:
array_multisort($array);
array_unique($array);

【讨论】:

  • 不知道多排序,+1。
【解决方案3】:

你也可以使用pear包Math_Combinatorics

require_once 'Combinatorics.php';
$combinatorics = new Math_Combinatorics;
$a = array('a', 'b', 'c');

// creating and storing the combinations
for($combinations = array(), $n=1; $n<=count($a); $n++) {
  $combinations = array_merge($combinations, $combinatorics->combinations($a, $n));
}

// test output
foreach($combinations as $c) {
  echo join(', ', $c), "\n";
}

打印

a
b
c
a, b
a, c
b, c
a, b, c

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 2011-12-02
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多