$arr = array(
    array('a','b','c'),
    array('d','e','f'),
    array('g','h','i'),
    array('j','k','l')
);怎么输出这样的数组的所有排列方式?整个数组结构是不变的,变的只是元素的位置。比如说, a和b对换一位置是另一种排列方式,但a和d无法交换位置。 

解决方案 »

  1.   

    给你个算法
    <?php
    $arr = array('a','b','c','d');
    $result = func('',$arr);
    $result = arrayChange($result);
    /**
     * 排序
     * @param  string $first [description]
     * @param  [type] $arr   [description]
     * @return [type]        [description]
     */
    function func($first = '', $arr){
            $len = count($arr);
            if($len == 1) {
                    $results[] = $first . $arr[0];
            } else {
                    for($i=0; $i<count($arr); $i++) {
                            $tmp = $arr[0];
                            $arr[0] = $arr[$i];
                            $arr[$i] = $tmp;
                            $results[] = func($first.$arr[0], array_slice($arr, 1));
                    }
            }
            return $results;
    }
    /**
     * 多维数组转一位数组
     * @param  [type] $a [description]
     * @return [type]    [description]
     */
    function arrayChange($a){
    static $arr2;
    foreach($a as $v){
    if(is_array($v)){
    arrayChange($v);
    }else{ $arr2[]=$v;
    }
    }
    return $arr2;
    }
    echo "<pre>";
    print_r($result);
    ?>