php 数组排序 按照某字段

news/2024/7/7 12:48:18
$arr =[
     array (
         'name' => '小坏龙' ,
         'age' =>28
     ),
     array (
         'name' => '小坏龙2' ,
         'age' =>14
     ),
     array (
         'name' => '小坏龙3' ,
         'age' =>59
     ),
     array (
         'name' => '小坏龙4' ,
         'age' =>23
     ),
     array (
         'name' => '小坏龙5' ,
         'age' =>23
     ),
     array (
         'name' => '小坏龙6' ,
         'age' =>21
     ),
];
 
array_multisort (array_column( $arr , 'age' ),SORT_DESC, $arr );
print_r( $arr );

  其中  array_column(数组,数组中的某个键值)  从多维数组中取出某个键值的一列  返回一个一维数组;

array_multisort(数组(一维数组),排序方式(SOTR_ASC,SOTR_DESC),其他数组(可以是二维的))

用PHP自带array_multisort函数排序 
<?php

    $data = array();
    $data[] = array('volume' => 67, 'edition' => 2);
    $data[] = array('volume' => 86, 'edition' => 1);
    $data[] = array('volume' => 85, 'edition' => 6);
    $data[] = array('volume' => 98, 'edition' => 2);
    $data[] = array('volume' => 86, 'edition' => 6);
    $data[] = array('volume' => 67, 'edition' => 7);

    // 取得列的列表
    foreach ($data as $key => $row)
    {
        $volume[$key]  = $row['volume'];
        $edition[$key] = $row['edition'];
    }

    array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);

    print_r($data);
?>

输出结果:

复制代码 代码如下:
Array
(
    [0] => Array
        (
            [volume] => 98
            [edition] => 2
        )
    [1] => Array
        (
            [volume] => 86
            [edition] => 1
        )
    [2] => Array
        (
            [volume] => 86
            [edition] => 6
        )
    [3] => Array
        (
            [volume] => 85
            [edition] => 6
        )
    [4] => Array
        (
            [volume] => 67
            [edition] => 2
        )
    [5] => Array
        (
            [volume] => 67
            [edition] => 7
        )
)

关于array_multisort官方文档也有比较详细的说明:http://www.php.net/manual/zh/function.array-multisort.php

二、自定义函数排序1

复制代码 代码如下:

<?php
    $data = array();
    $data[] = array('volume' => 67, 'edition' => 2);
    $data[] = array('volume' => 86, 'edition' => 1);
    $data[] = array('volume' => 85, 'edition' => 6);
    $data[] = array('volume' => 98, 'edition' => 2);
    $data[] = array('volume' => 86, 'edition' => 6);
    $data[] = array('volume' => 67, 'edition' => 7);

    // 取得列的列表
    foreach ($data as $key => $row)
    {
        $volume[$key]  = $row['volume'];
        $edition[$key] = $row['edition'];
    }

    $ret = arraySort($data, 'volume', 'desc');

    print_r($ret);

    /**
     * @desc arraySort php二维数组排序 按照指定的key 对数组进行排序
     * @param array $arr 将要排序的数组
     * @param string $keys 指定排序的key
     * @param string $type 排序类型 asc | desc
     * @return array
     */
    function arraySort($arr, $keys, $type = 'asc') {
        $keysvalue = $new_array = array();
        foreach ($arr as $k => $v){
            $keysvalue[$k] = $v[$keys];
        }
        $type == 'asc' ? asort($keysvalue) : arsort($keysvalue);
        reset($keysvalue);
        foreach ($keysvalue as $k => $v) {
           $new_array[$k] = $arr[$k];
        }
        return $new_array;
    }
?>


输出结果:

复制代码 代码如下:
Array
(
    [3] => Array
        (
            [volume] => 98
            [edition] => 2
        )

    [4] => Array
        (
            [volume] => 86
            [edition] => 6
        )

    [1] => Array
        (
            [volume] => 86
            [edition] => 1
        )

    [2] => Array
        (
            [volume] => 85
            [edition] => 6
        )

    [5] => Array
        (
            [volume] => 67
            [edition] => 7
        )

    [0] => Array
        (
            [volume] => 67
            [edition] => 2
        )

)

这个自定义函数与系统函数的一个区别就是:自定义函数只支持针对某一个key的排序,如果要支持多个key的排序需要执行多次; 而系统函数array_multisort可以一次性对多个key且可以指定多个排序规则,系统函数还是相当强大的,推荐使用系统函数,毕竟是C底层实现 的,这里只是举例说明如果通过自定义函数来对数组进行排序,当然这个自定义函数也可以继续扩展来支持更多的排序规则。在取排名、排行榜、成绩等场景中用到 的还是非常多的。

三、自定义函数排序2

以下函数是对一个给定的二维数组按照指定的键值进行排序,先看函数定义:

复制代码 代码如下:

function array_sort($arr,$keys,$type='asc'){ 
 $keysvalue = $new_array = array();
 foreach ($arr as $k=>$v){
  $keysvalue[$k] = $v[$keys];
 }
 if($type == 'asc'){
  asort($keysvalue);
 }else{
  arsort($keysvalue);
 }
 reset($keysvalue);
 foreach ($keysvalue as $k=>$v){
  $new_array[$k] = $arr[$k];
 }
 return $new_array; 
}


它可以对二维数组按照指定的键值进行排序,也可以指定升序或降序排序法(默认为升序),用法示例:

复制代码 代码如下:

$array = array(
 array('name'=>'手机','brand'=>'诺基亚','price'=>1050),
 array('name'=>'笔记本电脑','brand'=>'lenovo','price'=>4300),
 array('name'=>'剃须刀','brand'=>'飞利浦','price'=>3100),
 array('name'=>'跑步机','brand'=>'三和松石','price'=>4900),
 array('name'=>'手表','brand'=>'卡西欧','price'=>960),
 array('name'=>'液晶电视','brand'=>'索尼','price'=>6299),
 array('name'=>'激光打印机','brand'=>'惠普','price'=>1200)
);

$ShoppingList = array_sort($array,'price');
print_r($ShoppingList);


上面是对$array这个二维数组按照'price'从低到高的排序。

转载于:https://www.cnblogs.com/as3lib/p/8206597.html


http://www.niftyadmin.cn/n/1999119.html

相关文章

给同学的第一次工作的一封信

小伟、小杰、阿刚&#xff1a;你们好&#xff01;看到你们对工作的热情真的好让我感动。这让我想到了去年和前年时暑假的我。满怀着激情和憧憬去找工作&#xff0c;去努力的发展自己&#xff0c;强大自己。这种感觉真好&#xff01;开始工作是件很好的事情&#xff0c;是人生的…

mysql如何刷新内存_MySQL-脏页的刷新机制

MySQL内存结构-缓冲区MySQL的缓冲区中有数据页&#xff0c;索引页&#xff0c;插入缓冲等等&#xff0c;这个角度是从页的功能来分类的。本小节从另一个视角关注这些页&#xff0c;如果从 是否被修改过(和磁盘不一致) 这个角度来区分这些页&#xff0c;那么页可以被分为干净的页…

Android开发搭建环境所需要的各种包,不断更新中。。。

封装好的用于开发Android的ADT Bundle&#xff1a;32位版&#xff1a;adt-bundle-windows-x86-20140702.zip请添加链接描述&#xff08;百度网盘&#xff09; 64位版&#xff1a;adt-bundle-windows-x86_64-20140702.zip请添加链接描述(Google 地址) 提供了很多Android开发相关…

vc的dll基本用法

vc的dll基本用法 因为要用vc的dll&#xff0c;所以今天做了一些试验&#xff0c;还是有几点记录一下&#xff1a; 一.设置&#xff1a;1.预处理设置&#xff1a;如果有如下错误unexpected end of file while looking for precompiled header directive可以禁止预处理&#…

mysql 周处理_mysql按年度、季度、月度、周、日SQL统计查询mysql没有提供unix时间戳的专门处理函数【转】...

源地址&#xff1a;http://www.educity.cn/wenda/399779.htmlmysql 按年度、季度、月度、周、日SQL统计查询mysql没有提供unix时间戳的专门处理函数&#xff0c;所以&#xff0c;如果遇到时间分组&#xff0c;而你用的又是整型unix时间戳&#xff0c;则只有转化为mysql的其他日…

非常滑稽的表演

非常滑稽的表演 3月28日&#xff0c;我看到一篇新闻报道&#xff0c;题为“38家软件企业呼吁遵守“开源许可证””&#xff0c;顿时引起我的注意。 国内企业呼吁遵守“开源许可证”&#xff0c;是一件好事情&#xff0c;表明企业开始对开源软件给予重视。但是&#xff0c;“…

php 导出 excel

关于 PHP 导出 excel csv 常用的有 PHPexcel ,本文整理了一些其他方案。 高性能 Excel 扩展 sudo apt-get install -y zlib1g-dev git clone https://github.com/jmcnamara/libxlsxwriter.git cd libxlsxwriter make && sudo make install // https://github.com/viest…

git更换_Hexo实战002:快速更换博客主题

Hexo不仅搭建博客很快&#xff0c;而且更换主题也非常的方便。在Hexo官方上有非常多的主题模板(目前拥有321个模块)&#xff0c;总有一款符合风格的主题模块。当然这里面有些主题因太久没有维护链接可能失效了&#xff0c;所以实际上并没有显示的那么多但对于博客创建来说基本够…