代码之家  ›  专栏  ›  技术社区  ›  Ozzy

php清理排列数组

  •  0
  • Ozzy  · 技术社区  · 15 年前

    嘿,基本上,我有一个数组:

    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
    
    3 回复  |  直到 15 年前
        1
  •  3
  •   Doug T.    15 年前

    只是 sort 组成阵列:

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

    所以“c”,“b”变为=>“b”,“c”
    而“b”,“c”变为=>“b”,“c”

    它们是相同的。

        2
  •  3
  •   hsz    15 年前
    array_multisort($array);
    array_unique($array);
    
        3
  •  1
  •   VolkerK    15 年前

    你也可以用梨包 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