public static function getPermutation(array $orignal = [])
{
// 排除非数组的参数
if (! is_array($orignal)) {
return [];
}
// 排除空数组
if (empty($orignal)) {
return [];
}
// 排除只有一个元素的数组
if (count($orignal) < 2) {
// 返回的目标数组
$targetTmp = array_shift($orignal);
// 返回结果集
// 返回结果集
return array_map(function ($v) {
return [$v];
}, $targetTmp);
}
// 构建目标数组
$target = array_shift($orignal);
// 目标数组第一个元素格式化为数组
$target = is_array($target) ? $target : [];
// 下一个需要处理的数组
$tmp = array_shift($orignal);
// 非正常数据标识
//$invalideParam = false;
// 数组且不为空
while (is_array($tmp) && ! empty($tmp)) {
// // 验证参数是否是一维数组
// if (count($tmp) != count($tmp, COUNT_RECURSIVE)) {
// $invalideParam = true;
// break;
// }
/**
* 原始数组的循环
* array(
* 0 =>1,
* 1 =>2,
* 2 =>3,
* );.
*/
// 目标数组的临时变量
$targetTmp = [];
foreach ($target as $value) {
foreach ($tmp as $v) {
// 临时数组变量
$targetTmp[] = array_merge([$value], [$v]);
}
}
// 原始数组的替换
$target = $targetTmp;
// 移动数组的下一个元素
$tmp = array_shift($orignal);
}
// // 存在非一维数组项
// if ($invalideParam) {
// return [];
// }
// 返回结果集
return is_array($target) ? $target : [];
}
本文档使用 521Wiki 发布