一、大小排列(冒泡排序)
主要運(yùn)用于數(shù)組數(shù)字大小排序
function maopaoSort(&$arr){
//必須是&$arr,傳一個(gè)地址,如果是$arr,根據(jù)函數(shù)調(diào)用機(jī)制,排序?qū)o法生效
$temp=0; //中間變量
$flag=false;
//外層循環(huán)控制循環(huán)次數(shù)
for($i=0;$i<count($arr)-1;$i++){
//內(nèi)層循環(huán)控制每一次循環(huán)的交換
for($j=0;$j<count($arr)-1-$i;$j++){
//若前面的數(shù)比后面的數(shù)大,則交換
if($arr[$j]>$arr[$j+1]){
$temp=$arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$temp;
$flag=true;
}
}
if(!$flag){
//已經(jīng)是有序
break;
}
$flag=false;
}
return $arr;
}


二、構(gòu)建產(chǎn)品參數(shù)(遞歸)
主要運(yùn)用于商品的多個(gè)參數(shù)之間的所有組合
/*構(gòu)建商品參數(shù)集*/
function brush($res = [], $arr = [])
{
if (empty($res)) $res = (array)array_shift($arr);
if (empty($arr)) return $res;
$current = array_shift($arr); # 接下來要參與計(jì)算的一組屬性
$last = [];
foreach ($res as $row => $row_val) { # 循環(huán)上一次已經(jīng)算出的集合
foreach ($current as $col => $col_val) {
$last[] = $row_val . '_' . $col_val;
}
}
return brush($last,$arr); # 遞歸處理, 直到$arr滾到最后一組屬性
}
示例:color:
Red,black
Available Metals:
Yellow Gold,White Gold,Rose Gold,Platinum
Available to fit these Center Stone Shapes:
圖形1,圖形2,圖形3,圖形4
如圖:循環(huán)出所有的產(chǎn)品參數(shù)組合


三,樹狀排列
主要應(yīng)用于分類排列 先找出一級(jí)分類再找一級(jí)分類下的二級(jí)類以此類推

/**
* 無限分類-權(quán)限
* @param array $cate 欄目
* @param string $lefthtml 分隔符
* @param int $pid 父ID
* @param int $level 層級(jí)
* @return array
*/
public static function cateTree($cate ,$name='title', $lefthtml = '|— ' , $pid = 0 , $level = 0 ){
$arr = array();
foreach ($cate as $v){
if ($v['pid'] == $pid) {
$v['level'] = $level + 1;
$v['lefthtml'] = str_repeat($lefthtml,$level);
$v['l'.$name] = $v['lefthtml'].lang($v[$name]);
$arr[] = $v;
$arr = array_merge($arr, self::cateTree($cate,$name, $lefthtml, $v['id'], $level+1));
}
}
return $arr;
}

主要運(yùn)用于數(shù)組數(shù)字大小排序
function maopaoSort(&$arr){
//必須是&$arr,傳一個(gè)地址,如果是$arr,根據(jù)函數(shù)調(diào)用機(jī)制,排序?qū)o法生效
$temp=0; //中間變量
$flag=false;
//外層循環(huán)控制循環(huán)次數(shù)
for($i=0;$i<count($arr)-1;$i++){
//內(nèi)層循環(huán)控制每一次循環(huán)的交換
for($j=0;$j<count($arr)-1-$i;$j++){
//若前面的數(shù)比后面的數(shù)大,則交換
if($arr[$j]>$arr[$j+1]){
$temp=$arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$temp;
$flag=true;
}
}
if(!$flag){
//已經(jīng)是有序
break;
}
$flag=false;
}
return $arr;
}


二、構(gòu)建產(chǎn)品參數(shù)(遞歸)
主要運(yùn)用于商品的多個(gè)參數(shù)之間的所有組合
/*構(gòu)建商品參數(shù)集*/
function brush($res = [], $arr = [])
{
if (empty($res)) $res = (array)array_shift($arr);
if (empty($arr)) return $res;
$current = array_shift($arr); # 接下來要參與計(jì)算的一組屬性
$last = [];
foreach ($res as $row => $row_val) { # 循環(huán)上一次已經(jīng)算出的集合
foreach ($current as $col => $col_val) {
$last[] = $row_val . '_' . $col_val;
}
}
return brush($last,$arr); # 遞歸處理, 直到$arr滾到最后一組屬性
}
示例:color:
Red,black
Available Metals:
Yellow Gold,White Gold,Rose Gold,Platinum
Available to fit these Center Stone Shapes:
圖形1,圖形2,圖形3,圖形4
如圖:循環(huán)出所有的產(chǎn)品參數(shù)組合


三,樹狀排列
主要應(yīng)用于分類排列 先找出一級(jí)分類再找一級(jí)分類下的二級(jí)類以此類推

/**
* 無限分類-權(quán)限
* @param array $cate 欄目
* @param string $lefthtml 分隔符
* @param int $pid 父ID
* @param int $level 層級(jí)
* @return array
*/
public static function cateTree($cate ,$name='title', $lefthtml = '|— ' , $pid = 0 , $level = 0 ){
$arr = array();
foreach ($cate as $v){
if ($v['pid'] == $pid) {
$v['level'] = $level + 1;
$v['lefthtml'] = str_repeat($lefthtml,$level);
$v['l'.$name] = $v['lefthtml'].lang($v[$name]);
$arr[] = $v;
$arr = array_merge($arr, self::cateTree($cate,$name, $lefthtml, $v['id'], $level+1));
}
}
return $arr;
}
