Blogger Information
Blog 43
fans 2
comment 2
visits 113490
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
解析tpshop笛卡尔积
朝游东海
Original
930 people have browsed it

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

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
1 comments
朝游东海 2017-11-08 16:19:16
OSama:查看图片[拖动图片到新建标签页]
1 floor
Author's latest blog post