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