日志样式

PHP开发中常用的数据排列方法

一、大小排列(冒泡排序)


主要运用于数组数字大小排序

 

 function maopaoSort(&$arr){    

     //必须是&$arr,传一个地址,如果是$arr,根据函数调用机制,排序将无法生效

        $temp=0;    //中间变量

        $flag=false;

            //外层循环控制循环次数

        for($i=0;$i<count($arr)-1;$i++){

               //内层循环控制每一次循环的交换

                 for($j=0;$j<count($arr)-1-$i;$j++){

                     //若前面的数比后面的数大,则交换

                     if($arr[$j]>$arr[$j+1]){

                        $temp=$arr[$j];

                        $arr[$j]=$arr[$j+1];

                        $arr[$j+1]=$temp;

                        $flag=true;

                    }

                }

                if(!$flag){

                    //已经是有序

                    break; 

                }

                $flag=false;

            }

            return $arr;

}





 

二、构建产品参数(递归)


主要运用于商品的多个参数之间的所有组合

/*构建商品参数集*/ 

function brush($res = [], $arr = [])

{

    if (empty($res)) $res = (array)array_shift($arr);

    if (empty($arr)) return $res;

    $current = array_shift($arr); # 接下来要参与计算的一组属性

    $last = [];

    foreach ($res as $row => $row_val) { # 循环上一次已经算出的集合

        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

如图:循环出所有的产品参数组合




三,树状排列


主要应用于分类排列 先找出一级分类再找一级分类下的二级类以此类推




   /**

     * 无限分类-权限

     * @param array $cate         栏目

     * @param string $lefthtml 分隔符

     * @param int $pid         父ID

     * @param int $level         层级

     * @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;

    }