数组是一门编程语言必不可少的部分,对数据的操作往往就是对数组的操作。今天分享一个对数组排序的常用内置函数,当然是php的啦。
需求:从数据库中根据用户经纬度和目标所在的经纬度对比,算出所有用户到目标的距离。然后根据距离由近到远排序,其次根据每个用户的价格排序,然后根据其他内容排序。。。。
分析:这是一个按照优势条件排序数据的问题,也是冒泡。当然可以分成多次数组后组合,多次循环冒泡,这这是消耗资源比较多。好在php内置了一个函数,可以很轻松地实现这样的逻辑。
当然距离计算部分跳过,下面以某个数组测试这个内置函数,结果很乐观。
array_multisort() 函数返回排序数组。您可以输入一个或多个数组。函数先对第一个数组进行排序,接着是其他数组,如果两个或多个值相同,它将对下一个数组进行排序。
注释:字符串键名将被保留,但是数字键名将被重新索引,从 0 开始,并以 1 递增。
注释:您可以在每个数组后设置排序顺序和排序类型参数。如果没有设置,每个数组参数会使用默认值。
$array = array( array('juli'=>1,'price'=>24.00,'username'=>'a'), array('juli'=>2,'price'=>24.20,'username'=>'b'), array('juli'=>2,'price'=>22.30,'username'=>'c'), array('juli'=>6,'price'=>23.00,'username'=>'d'), array('juli'=>8,'price'=>24.60,'username'=>'e'), array('juli'=>2,'price'=>23.00,'username'=>'f'), array('juli'=>2,'price'=>23.00,'username'=>'g'), ); foreach ($array as $key => $value) { $juli[$key] = $value['juli']; $price[$key] = $value['price']; $name[$key] = $value['username']; } echo '<pre>'; array_multisort($array,$juli,$price,$name);//先按juli排序,然后按照金额排序,再按用户名称排序 print_r($array);//按时间倒叙
$expire = []; foreach ($dataList as $key=> $item){ $offers[] = $item; $expire[] = $item['ExpireTime']; } array_multisort($expire,SORT_DESC,$offers); print_r($offers);
一个根据数组key的长度或者val的长度排序的函数:
//数组长度逆序 public static function arrValueSort($arr) { $ret = []; $return = []; foreach($arr as $key=>$val){ $ret[$key] = strlen($val);//根据需要选择用key或者val } arsort($ret);//按长度最大排序 foreach ($ret as $pinyin => $item){ $return[$pinyin] = $arr[$pinyin]; } return $return; }
结果:
Array ( [woshishuangyinhaozifuchuanzaisanjimululimian] => 我是双引号字符串在三级目录里面 [woshizhengchangshuchudebianliang] => 我是正常输出的变量 [woshidanyinhaozifuchuanzaimulu] => 我是单引号字符串在目录 [woshishuangyinhaozifuchuan] => 我是双引号字符串 [woshidanyinhaozifuchuan] => 我是单引号字符串 [zhijiemulu] => 直接目录 [dajiahaoa] => 大家好啊 [shuchu] => 输出 [ceshi] => 测试 [mulu] => 目录 )