<?php
$arr = array(
20 => array('7','8','9'),
10=>array('1','2'),
1 => array('3','4'),
);
foreach ($arr as $k => $v)//OSama:$spec_arr 是一个二维数组
{
$spec_arr_sort[$k] = count($v);//OSama:计算$(this).$v的个数;
//OSama:$spec_arr_sort=[ 20=>3,10=>2,1=>2 ]
}
asort($spec_arr_sort);
//OSama:$spec_arr_sort = [ 1=>2,10=>2,20=>3 ];
foreach ($spec_arr_sort as $key =>$val)//OSama:对升序后的数组进行组装
{
$spec_arr2[$key] = $arr[$key];//OSama: $spec_arr2[]
//OSama: $spec_arr2 = [ 1=>['3','4'],10=>['1','2'],20=>['7','8','9']];
}
//OSama: $spec_arr2 = [ 1=>['3','4'],10=>['1','2'],20=>['7','8','9']];
$clo_name = array_keys($spec_arr2);
$spec_arr2 = combineDika($spec_arr2);
/*
print_r($spec_arr2);exit;
*/
/**
* 多个数组的笛卡尔积
*
* @param unknown_type $data
*/
function combineDika() {
$data = func_get_args();//Osama:func_get_args动态获取函数参数;动态的获取数组中的每个参数;
//OSama: $data = array( '0'=> [ 1=>['3','4'],10=>['1','2'],20=>['7','8','9']]);
$data = current($data);//OSama:current() 函数返回数组中的当前元素的值。
//OSama: $data = [ 1=>['3','4'],10=>['1','2'],20=>['7','8','9']];
$cnt = count($data);//Osama:count() 函数返回数组中元素的数目。
//Osama:3
$result = array();
$arr1 = array_shift($data);//OSama:array_shift() 函数删除数组中第一个元素,并返回被删除元素的值。
//OSama:$arr1 = [3,4];
foreach($arr1 as $key=>$item)
{
$result[] = array($item);
}
//Osama: $result [ 0=>[3],1=>[4]]
//OSama:$data = [[1,2],[7,8,9]];
foreach($data as $key=>$item)
{
$result = combineArray($result,$item);
//OSama: 一轮轮完 [[3,1],[3,2],[4,1],[4,2]]
}
//print_r($result);exit;
return $result;
}
/**
* 两个数组的笛卡尔积
* @param unknown_type $arr1
* @param unknown_type $arr2
*/
function combineArray($arr1,$arr2) {
//Osama:一轮: $arr1=[ 0=>[3],1=>[4]]; $arr2 = [1,2];
//OSama:二轮:$arr1 = [[3,1],[3,2],[4,1],[4,2]]; $arr2 = [7,8,9];
$result = array();
foreach ($arr1 as $item1)
{
foreach ($arr2 as $item2)
{
$temp = $item1;//OSama: 1轮:3
$temp[] = $item2;//OSama: 1轮:[3,1] //在PHP里面,往数组中追加元素最简单的方法是使用[]赋值,
//https://zhidao.baidu.com/question/523460645.html
$result[] = $temp;//OSama: 1轮:[[3,1]]
}
//OSama: $arr2轮完: [[3,1],[3,2]]
}
//OSama:$arr1 轮完 [[3,1],[3,2],[4,1],[4,2]]
return $result;
}
/***********************************解析 func_num_args() 动态获取函数参数-[获取整个数组的参数]**********************/
/*
//$test = ['计','算','多','个','集','合','的','笛','卡','尔','积'];
foo('计','算','多','个','集','合','的','笛','卡','尔','积');
function foo(){
$length = func_num_args();//获取数组的长度
$args = func_get_args();
for($i=0; $i<$length; $i++){
echo "第{$i}个参数值:{$args[$i]}<br />\n";
}
}
第0个参数值:计
第1个参数值:算
第2个参数值:多
第3个参数值:个
第4个参数值:集
第5个参数值:合
第6个参数值:的
第7个参数值:笛
第8个参数值:卡
第9个参数值:尔
第10个参数值:积
*/
/***********************************************解析current()方法 -- 降维函数****************************************/
//$temp = [[[2,3,4],[5],[6]]];
//$temp = current($temp);//降维函数
//print_r($temp);exit;//OSama:当数组为一维数组时[2,3,4],返回2
//OSama:当数组为一维数组时[[2,3,4],[5],[6]];,返回[2,3,4]
/***********************************************解析 $temp[] = 7 赋值*************************************************/
//$temp = [3,4];
//$temp[] = 7; //在PHP里面,往数组中追加元素最简单的方法是使用[]赋值,
//print_r($temp);exit;
//$temp = [3,4,7];
/***********************************************两个数组的笛卡尔积 -- [注意第一个数组的格式[[],[],[]]]*****************/
$arr = [];
$arr1 = [['a'],['b'],['c'],['d']];
$arr2 = [1,2,3,4];
foreach($arr1 as $v1){
foreach($arr2 as $v2){
$temp = $v1;
$temp[] = $v2;
$arr[] = $temp;
}
}
print_r($arr);exit;
/***百度方法***/
/**
* 计算多个集合的笛卡尔积
* @param Array $sets 集合数组
* @return Array
*/
/*
function CartesianProduct($sets){
// 保存结果
$result = array();
// 循环遍历集合数据
for($i=0,$count=count($sets); $i<$count-1; $i++){
// 初始化
if($i==0){
$result = $sets[$i];
}
// 保存临时数据
$tmp = array();
// 结果与下一个集合计算笛卡尔积
foreach($result as $res){
foreach($sets[$i+1] as $set){
$tmp[] = $res.$set;
}
}
// 将笛卡尔积写入结果
$result = $tmp;
}
return $result;
}
// 定义集合
$sets = array(
array('白色','黑色','红色'),
array('透气','防滑'),
array('37码','38码','39码'),
array('男款','女款')
);
$result = CartesianProduct($sets);
print_r($result);
*/
?>