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;
}