以0,1,2,3,4,5,6,7,8,9组成一个数组,列出所有不重复的3个数的排列
如数组0,1,2,3 则排列为012,013,023,123这4个
/**
* 计算结果
*
* @param array $arr [0, 1, 2, 3]
* @param int $num 一维数组的长度-1
* @param array $tmp 临时存储数据
* @param bool $first 是否为第一次执行
* @return array
*/
function calculation(array $arr, int $num, array $tmp = [], bool $first = false): array
{
$data = [];
foreach ($arr as $k => $v) {
if ($first && count($arr) - 1 == $num) return array_merge($data, [$arr]);
if (!$num) {
array_push($data, array_merge($tmp, [$v]));
} else {
array_shift($arr);
$data = array_merge($data, calculation($arr, $num - 1, array_merge($tmp, [$v])));
}
}
return $data;
}
// 执行结果为 [0, 1, 2] [0, 1, 3] [0, 2, 3] [1, 2, 3]
calculation([0, 1, 2, 3], 2, [], true);