php数组按照自定义key排序

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

评论/留言