网站建设资讯

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

网站建设 2021-10-28 09:23:04 | 阅读:694 | 作者:刘红旺 | 标签: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;
}

PHP代码

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

主要运用于商品的多个参数之间的所有组合
/*构建商品参数集*/ 
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
如图:循环出所有的产品参数组合
展示
数据展示2

三,树状排列

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

树状排列

   /**
     * 无限分类-权限
     * @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;
    }
 
效果