<?php
/**
* 返回给的数组的所有组合
* @email kavtong@163.com
* @param array $orignal 多维数组
* $orignal = array(
* array(1,2,3),
* array(4,5,6),
* array(7,8,9),
* );
* @return array(
* array(1,4,7),
* array(1,4,8),
* array(1,4,9),
* ...
* array(3,6,7),
* array(3,6,8),
* array(3,6,9),
* );
* 数组元素共: 3*3*3 = 27个
*/
function getPermutation(array $orignal = array()){
// 排除非数组的参数
if(!is_array($orignal)){
return [];
}
// 排除空数组
if(empty($orignal)){
return [];
}
// 排除只有一个元素的数组
if(count($orignal) < 2){
// 返回的目标数组
$targetTmp = array_shift($orignal);
// 返回结果集
return is_array($targetTmp)?$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 = array();
foreach($target as $value){
foreach($tmp as $v){
// 临时数组变量
$targetTmp[] = array_merge((array)$value,[$v]);
}
}
// 原始数组的替换
$target = $targetTmp;
// 移动数组的下一个元素
$tmp = array_shift($orignal);
}
// 存在非一维数组项
if($invalideParam){
return [];
}
// 返回结果集
return is_array($target)?$target:[];
}
多维数组的排列组合(商品多规格)算法[PHP]
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...