<?php
class tomato {
static $myArray;
function tomato($str) {
$this->generate(str_split($str));
$this->myArray = $this->multi_unique($this->myArray);
}
function generate($arr1, $arr2=array()) {
if(Empty($arr1)) {
$this->myArray[] = $arr2;
} else {
$len = count($arr1) - 1;
for ($i = $len ; $i >= 0; --$i) {
$arg1 = $arr1;
$arg2 = $arr2;
list($arg) = array_splice($arg1, $i, 1);
array_unshift($arg2, $arg);
$this->generate($arg1, $arg2);
}
return $this->myArray;
}
}
function multi_unique($arr) {
foreach ($arr as $k=>$val)
$new[$k] = serialize($val);
$arr = array_unique($new);
foreach($arr as $k=>$val)
$new1[] = unserialize($val);
return $new1;
}
function printIt() {
for($i = 0; $i<count($this->myArray); $i++) {
echo implode("", $this->myArray[$i])."<br>";
}
}
}
$code = new tomato("1244");
$code->printIt();
?>
看了 juzhax 貼的 “在PHP里其中一个Permutation方程式” , 覺得用數組的方式定義好排列伸縮性就只能在長度4的情況下產生。
所以寫了個recursive的方法﹐計算上也不會花太多時間。有意思的人自己去測試看看吧。