php排列组合枚举:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ConbineController extends Controller
{
//组合
public static $attNew = array();
//源
public static $att = array();
//个数
public static $attCount = 0;
/**
* 格式化行
*/
public function formatRow()
{
//属性
$att = array([0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2]);#这里可以写任意的数组,或者一维
if (is_array($att)) {
foreach ($att as $x) {
self::$att[] = $x;
}
}
//属性个数
self::$attCount = count(self::$att);
$this->Combination();
return self::$attNew;
}
/**
* 组合
*/
public function Combination()
{
$num = func_num_args();
if ($num == 0) {
call_user_func_array(array($this, __FUNCTION__), array($num));
} else {
$t = func_get_args();
$num = $num - 1;
$i = $t[$num];
if (is_array(self::$att)) {
foreach (self::$att[$i] as $r) {
if (self::$attCount > 0 && self::$attCount == ($i + 1)) {
$a = array();
for ($x = 0; $x < $num; $x++) {
$a[] = $t[$x];
}
$a[] = $r;
self::$attNew[] = $a;
//return $s;
} else {
$arr = array();
for ($x = 0; $x < $num; $x++) {
$arr[] = $t[$x];
}
$arr[] = $r;
$arr[] = $i + 1;
if ($num > 20) {
exit('break;');
break;
}
call_user_func_array(array($this, __FUNCTION__), $arr);
}
}
}
}
}
}