数组是一门编程语言必不可少的部分,对数据的操作往往就是对数组的操作。今天分享一个对数组排序的常用内置函数,当然是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] => 目录
)