博客列表 >解析tpshop笛卡尔积

解析tpshop笛卡尔积

朝游东海
朝游东海原创
2017年11月08日 16:05:08921浏览

<?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);

 

*/

?>

笛卡尔积001.bmp

笛卡尔积002.bmp

笛卡尔积003.bmp

笛卡尔积004.bmp

笛卡尔积005.bmp

psdfasdasdfasdfb.jpg

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议
朝游东海2017-11-08 16:19:161楼
OSama:查看图片[拖动图片到新建标签页]