精华内容
下载资源
问答
  • Excel排序怎么排?我们经常使用表格来搜集记录信息。...单个字段排序就是只按一关键字进行升序或者降序排序,排列的字段可以是数字或文本 例如:下面有一张成绩单,我们需要对成绩单按照总分从高到低进行排序,该.

    在这里插入图片描述

    Excel排序怎么排?我们经常使用表格来搜集记录信息。如果我们表格中的数据过多,而且没有进行数据的归纳总结。那应该是件让人头大的事儿,为了获得更加准确的数据,我们需要对Excel中的内容进行排序。排序功能可以把表格中的数据按照指定的顺序规律进行排序,从而更加直观地显示、查看和理解数据。相信很多人用过简单的排序,可是排序你真的会用吗?

    1、按照单个字段进行排序

    单个字段排序就是只按一个关键字进行升序或者降序排序,排列的字段可以是数字或文本

    例如:下面有一张成绩单,我们需要对成绩单按照总分从高到低进行排序,该如何操作呢?在这里插入图片描述

    在这里介绍两种方法

    方法一:单击总分所在列任意单元格,单击【数据】选项卡,找到【排序和筛选】选项组,单击【降序】即可,演示如下图:在这里插入图片描述

    方法二:单击总分所在列任意单元格,点击鼠标右键,选择【排序】选项,选择降序即可,演示如下图:在这里插入图片描述

    2、按照多个字段进行排序

    多字段排序就是指按照两个或两个以上的关键字进行排序

    例如:按照总分从高到低进行排序,当总分相同按照数学成绩从低到高排序,应该如何操作呢?

    方法:单击数据所在区域任意单元格,选择【数据】选项卡,找到【数据和排序】选项组,单击【排序】按钮

    在弹出的“排序”对话框中单击“主要关键字”下三角按钮选择“总分”,“排序依据”选择“单元格值”,“次序”选择“降序”

    单击【添加条件】按钮,单击“次要关键字”下三角按钮选择“数学”,“排序依据”选择“单元格值”,“次序”选择“升序”,最后单击【确定】即可。演示如下图:在这里插入图片描述

    注意:如果排序的关键字比较多,排序的关键字位置不同排序的结果也不同。

    这些技巧对你的工作有帮助吗?别忘记点赞转发给好友一起分享Excel带给你的轻松与快乐,如有不明白的可以评论或私信小编,免费解答哟!

    欢迎关注公众号在这里插入图片描述

                                                END
    
    展开全文
  • 如果你已经使用了一段时间PHP的话,那么,你应该已经对它的数组比较熟悉了——这种数据结构允许你在单个变量中存储多个值,并且可以把它们作为一个集合进行操作。 经常,开发人员发现在PHP中使用这种数据结构对值...









    php 多维数组按数组的某一字段排序 数组排序

    欢迎加入php架构师之旅 群:410028331(招纳贤人-大师中)方便技术的交流

    如果你已经使用了一段时间PHP的话,那么,你应该已经对它的数组比较熟悉了——这种数据结构允许你在单个变量中存储多个值,并且可以把它们作为一个集合进行操作。

    经常,开发人员发现在PHP中使用这种数据结构对值或者数组元素进行排序非常有用。PHP提供了一些适合多种数组的排序函数,这些函数允许你在数组内部对元素进行排列,也允许用很多不同的方法对它们进行重新排序。在这篇文章中我们将讨论该排序中最重要的几个函数。

    简单排序

    首先,让我们来看看最简单的情况:将一个数组元素从低到高进行简单排序,这个函数既可以按数字大小排列也可以按字母顺序排列。PHP的sort()函数实现了这个功能,如Listing A所示:

    Listing A

    <?php

    Â $data = array(5,8,1,7,2);

    Â sort($data);

    Â print_r($data);

    Â ?>

    输出结果如下所示:

    Array ([0] => 1

    [1] => 2

    [2] => 5

    [3] => 7

    [4] => 8

    )

    也能使用rsort()函数进行排序,它的结果与前面所使用的sort()简单排序结果相反。Rsort()函数对数组元素进行从高到低的倒排,同样可以按数字大小排列也可以按字母顺序排列。Listing B给我们展示了它的一个例子:

    Listing B

    <?php $data = array(5,8,1,7,2);rsort($data); print_r($data);

    ?>

    它的输出结果如下:

    Array ([0] => 8

    [1] => 7

    [2] => 5

    [3] => 2

    [4] => 1

    )

    根据关键字排序

    当我们使用数组的时候,经常根据关键字对数组重新排序,从高到低。Ksort()函数就是根据关键字进行排序的函数,同时,它在排序的过程中会保持关键字的相关性。Listing C就是一个例子:

    Listing C

    <?php $data = array("US" => "United States", "IN" => "India", "DE" => "Germany", "ES" => "Spain");ksort($data); print_r($data);

    ?>

    它的输出结果如下:

    Array ([DE] => Germany

    [ES] => Spain

    [IN] => India

    [US] => United States

    )

    Krsort()函数是根据关键字对数组进行倒排,Listing D就是这样的例子:

    Listing D

    <?php $data = array("US" => "United States", "IN" => "India", "DE" => "Germany", "ES" => "Spain");krsort($data); print_r($data);

    ?>

    它的输出结果如下:

    Array ([US] => United States

    [IN] => India

    [ES] => Spain

    [DE] => Germany

    )

    根据值排序

    如果你想使用值排序来取代关键字排序的话,PHP也能满足你的要求。你只要使用asort()函数来代替先前提到的ksort()函数就可以了。如Listing E所示:

    Listing E

    <?php $data = array("US" => "United States", "IN" => "India", "DE" => "Germany", "ES" => "Spain");asort($data); print_r($data);

    ?>

    下面就是它的输出结果。请注意这个结果与上面使用ksort()函数所得到的结果的不同——在这两种情况中,都是按字母顺序进行排序的,但是它们是根据数组的不同字段进行排序的。

    同时,请注意关键字-值之间的联系会始终保持;它只是关键字-值对排序后的一种方式,排序并不会改变它们的对应关系。

    Array ([DE] => Germany

    [IN] => India

    [ES] => Spain

    [US] => United States

    )

    现在,你肯定能猜到这种排序也可以进行倒排,它使用arsort()函数完成这个功能。Listing F就是一个例子:

    Listing F

    <?php $data = array("US" => "United States", "IN" => "India", "DE" => "Germany", "ES" => "Spain");arsort($data); print_r($data);

    ?>

    下面是它的输出结果,根据值按字母表顺序进行倒排。将下面的结果与用krsort()函数进行倒排后生成的结果进行比较,就能很容易明白两者的不同了。

    Array ([US] => United States

    [ES] => Spain

    [IN] => India

    [DE] => Germany

    )

    自然语言排序

    PHP有一个非常独特的排序方式,这种方式使用认知而不是使用计算规则。这种特性称为自然语言排序,当创建模糊逻辑应用软件的时候这种排序方式非常有用。下面大家可以来看看它的一个简单例子,如Listing G所示:

    Listing G

    <?php $data = array("book-1", "book-10", "book-100", "book-5"); sort($data);print_r($data);

    natsort($data); print_r($data);?>

    它的输出结果如下:

    Array ([0] => book-1

    [1] => book-10

    [2] => book-100

    [3] => book-5

    )

    Array

    (

    [0] => book-1

    [3] => book-5

    [1] => book-10

    [2] => book-100

    )

    它们的不同已经很清楚了:第二个排序结果更直观,更“人性化”,然而第一个则更符合算法规则,更具“计算机”特点。

    自然语言能进行倒排吗?答案是肯定的!只要对natsort()的结果使用array_reverse()函数就可以了,Listing H就是一个简单例子:

    Listing H

    <?php $data = array("book-1", "book-10", "book-100", "book-5");natsort($data); print_r(array_reverse($data));

    ?>

    下面是它的输出结果:

    Array ([0] => book-100

    [1] => book-10

    [2] => book-5

    [3] => book-1

    )

    根据用户自定义的规则排序

    PHP也能让你定义自己的排序算法,你可以通过创建你自己的比较函数,并把它传递给usort()函数。如果第一个参数比第二个参数“小”的话,比较函数必须返回一个比0小的数,如果第一参数比第二个参数“大”的话,比较函数应该返回一个比0大的数。

    Listing I就是这样的一个例子,在这个例子中根据它们的长度对数组元素进行排序,最短的项放在最前面:

    Listing I

    <?php $data = array("joe@", "@", "asmithsonian@", "jay@");usort($data, 'sortByLen');

    print_r($data); function sortByLen($a, $b) {

    if (strlen($a) == strlen($b)) {

    return 0;

    } else {

    return (strlen($a) > strlen($b)) ? 1 : -1;

    }

    }

    ?>

    这样,就创建了我们自己的比较函数,这个函数使用strlen()函数比较每一个字符串的个数,然后分别返回1,0或-1.这个返回值是决定元素排列的基础。下面是它的输出结果:

    Array ([0] => jay@

    [1] => joe@

    [2] => @

    [3] => asmithsonian@

    )

    自然语言排序

    PHP有一个非常独特的排序方式,这种方式使用认知而不是使用计算规则。这种特性称为自然语言排序,当创建模糊逻辑应用软件的时候这种排序方式非常有用。下面大家可以来看看它的一个简单例子,如Listing G所示:

    Listing G

    <?php $data = array("book-1", "book-10", "book-100", "book-5"); sort($data);print_r($data);

    natsort($data); print_r($data);?>

    它的输出结果如下:

    Array ([0] => book-1

    [1] => book-10

    [2] => book-100

    [3] => book-5

    )

    Array

    (

    [0] => book-1

    [3] => book-5

    [1] => book-10

    [2] => book-100

    )

    它们的不同已经很清楚了:第二个排序结果更直观,更“人性化”,然而第一个则更符合算法规则,更具“计算机”特点。

    自然语言能进行倒排吗?答案是肯定的!只要对natsort()的结果使用array_reverse()函数就可以了,Listing H就是一个简单例子:

    Listing H

    <?php $data = array("book-1", "book-10", "book-100", "book-5");natsort($data); print_r(array_reverse($data));

    ?>

    下面是它的输出结果:

    Array ([0] => book-100

    [1] => book-10

    [2] => book-5

    [3] => book-1

    )

    根据用户自定义的规则排序

    PHP也能让你定义自己的排序算法,你可以通过创建你自己的比较函数,并把它传递给usort()函数。如果第一个参数比第二个参数“小”的话,比较函数必须返回一个比0小的数,如果第一参数比第二个参数“大”的话,比较函数应该返回一个比0大的数。

    Listing I就是这样的一个例子,在这个例子中根据它们的长度对数组元素进行排序,最短的项放在最前面:

    Listing I

    <?php $data = array("joe@", "@", "asmithsonian@", "jay@");usort($data, 'sortByLen');

    print_r($data); function sortByLen($a, $b) {

    if (strlen($a) == strlen($b)) {

    return 0;

    } else {

    return (strlen($a) > strlen($b)) ? 1 : -1;

    }

    }

    ?>

    这样,就创建了我们自己的比较函数,这个函数使用strlen()函数比较每一个字符串的个数,然后分别返回1,0或-1.这个返回值是决定元素排列的基础。下面是它的输出结果:

    Array ([0] => jay@

    [1] => joe@

    [2] => @

    [3] => asmithsonian@

    )

    多维排序

    最后,PHP也允许在多维数组上执行一些比较复杂的排序——例如,首先对一个嵌套数组使用一个普通的关键字进行排序,然后再根据另一个关键字进行排序。这与使用SQL的ORDER BY语句对多个字段进行排序非常相似。为了能更好的明白它是如何工作的,请仔细看Listing J所举的例子:

    Listing J

    <?php $data = array(array("id" => 1, "name" => "Boney M", "rating" => 3),

    array("id" => 2, "name" => "Take That", "rating" => 1),

    array("id" => 3, "name" => "The Killers", "rating" => 4),

    array("id" => 4, "name" => "Lusain", "rating" => 3),

    ); foreach ($data as $key => $value) {

    $name[$key] = $value['name'];

    $rating[$key] = $value['rating'];

    }

    array_multisort($rating, $name, $data); print_r($data);?>

    这里,我们在$data数组中模拟了一个行和列数组。然后,我使用array_multisort()函数对数据集合进行重排,首先是根据rating进行排序,然后,如果rating相等的话,再根据name排序。它的输出结果如下:

    Array ([0] => Array

    (

    [id] => 2

    [name] => Take That

    [rating] => 1

    ) [1] => Array

    (

    [id] => 1

    [name] => Boney M

    [rating] => 3

    )

    [2] => Array

    (

    [id] => 4

    [name] => Lusain

    [rating] => 3

    )

    [3] => Array

    (

    [id] => 3

    [name] => The Killers

    [rating] => 4

    )

    )

    array_multisort()函数是PHP中最有用的函数之一,它有非常广泛的应用范围。另外,就如你在例子中所看到的,它能对多个不相关的数组进行排序,也可以使用其中的一个元素作为下次排序的基础,还可以对数据库结果集进行排序。

    这些例子应该让你对PHP中各种数组排序函数的使用有了初步的了解,也向你展示了一些隐藏在PHP数组处理工具包的内部功能。

    最后,祝你能愉快的使用这些功能!

    读过的基本好书 推荐给大家,还有优惠券可以领取:

    寄语:在学习方面一定要舍得花钱~ 加油~
    -----------------------------------

    展开全文
  • MySQL汉字字段按拼音排序

    万次阅读 2009-08-11 21:07:00
    我们的MySQL使用latin1的默认字符集,也就是说,对汉字字段直接使用GBK内码的编码进行存储,当需要对一些有汉字的字段进行拼音排序时(特别涉及到类似于名字这样的字段时),默认无法通过order by关键字正确排序。...

    我们的MySQL使用latin1的默认字符集,也就是说,对汉字字段直接使用GBK内码的编码进行存储,当需要对一些有汉字的字段进行拼音排序时(特别涉及到类似于名字这样的字段时),默认无法通过order by关键字正确排序。

    经过网上查找,网上的办法大多是针对使用utf8字符集的数据库,主要的方法有:
    1)直接转换字段为gbk,比如:
    SELECT * FROM table ORDER BY CONVERT( chinese_field USING gbk ) ;
    或者干脆将相应字段改为gbk字符集。

    我在我的数据库测试了上面的方法,或者直接按字段排序,都不行,主要是排序结果不理想。

    直接排序

     

    2)查表法
    创建一个新表,用来存储拼音声母和使用该声母的汉字首字的对应关系。然后写一个函数,每次排序时通过转换为gbk再查表的方法得到字段内容首字的声母的方法。

    这个方法我也试了,太麻烦,而且针对我的数据库,也不能正确排序。


    后来,我查询了汉字编码的一些资料,发现GBK内码编码时本身就采用了拼音排序的方法(常用一级汉字3755个采用拼音排序,二级汉字就不是了,但考虑到人名等都是常用汉字,因此只是针对一级汉字能正确排序也够用了)。根据这个原理,直接按字段排序就应该可以的(我的数据库使用Latin1字符集,存的汉字本来就是GBK内码),但我试了以后发现不行。参考上面方法2的查表法,我把字段内容转换为16进制编码,再排,就OK了!

    这就是最终的办法:SELECT * FROM table ORDER BY hex( chinese_field ) 简单吧!

    这是我的例子数据排序输出的结果,如下图:

    按16进制排序

     

     

    附:汉字编码方式简介
    ASCII

        ASCII码是7位编码,编码范围是0x00-0x7F。ASCII字符集包括英文字母、阿拉伯数字和标点符号等字符。其中0x00-0x20和0x7F共33个控制字符。

        只支持ASCII码的系统会忽略每个字节的最高位,只认为低7位是有效位。HZ字符编码就是早期为了在只支持7位ASCII系统中传输中文而设计的编码。早期很多邮件系统也只支持ASCII编码,为了传输中文邮件必须使用BASE64或者其他编码方式。

    GB2312

        GB2312 是基于区位码设计的,区位码把编码表分为94个区,每个区对应94个位,每个字符的区号和位号组合起来就是该汉字的区位码。区位码一般 用10进制数来表示,如1601就表示16区1位,对应的字符是“啊”。在区位码的区号和位号上分别加上0xA0就得到了GB2312编码。

        区位码中01-09区是符号、数字区,16-87区是汉字区,10-15和88-94是未定义的空白区。它将收录的汉字分成两级:第一级是常用汉字计 3755个,置于16-55区,按汉语拼音字母/笔形顺序排列;第二级汉字是次常用汉字计3008个,置于56-87区,按部首/笔画顺序排列。一级汉字 是按照拼音排序的,这个就可以得到某个拼音在一级汉字区位中的范围,很多根据汉字可以得到拼音的程序就是根据这个原理编写的。

        GB2312字符集中除常用简体汉字字符外还包括希腊字母、日文平假名及片假名字母、俄语西里尔字母等字符,未收录繁体中文汉字和一些生僻字。可以用繁体汉字测试某些系统是不是只支持GB2312编码。

        GB2312的编码范围是0xA1A1-0x7E7E,去掉未定义的区域之后可以理解为实际编码范围是0xA1A1-0xF7FE。

    EUC-CN可以理解为GB2312的别名,和GB2312完全相同。

    区位码更应该认为是字符集的定义,定义了所收录的字符和字符位置,而GB2312及EUC-CN是实际计算机环境中支持这种字符集的编码。HZ和ISO-2022-CN是对应区位码字符集的另外两种编码,都是用7位编码空间来支持汉字。区位码和GB2312编码的关系有点像 和。

    GBK

        GBK 编码是GB2312编码的超集,向下完全兼容GB2312,同时GBK收录了Unicode基本多文种平面中的所有CJK汉字。同 GB2312一样,GBK也支持希腊字母、日文假名字母、俄语字母等字符,但不支持韩语中的表音字符(非汉字字符)。GBK还收录了GB2312不包含的 汉字部首符号、竖排标点符号等字符。

        GBK的整体编码范围是为0x8140-0xFEFE,不包括低字节是0×7F的组合。高字节范围是0×81-0xFE,低字节范围是0x40-7E和0x80-0xFE。

    低字节是0x40-0x7E的GBK字符有一定特殊性,因为这些字符占用了ASCII码的位置,这样会给一些系统带来麻烦。

        有些系统中用0x40-0x7E中的字符(如“|”)做特殊符号,在定位这些符号时又没有判断这些符号是不是属于某个 GBK字符的低字节,这样就会造成错误判断。在支持GB2312的环境下就不存在这个问题。需要注意的是支持GBK的环境中小于0x80的某个字节未必就 是ASCII符号;另外就是最好选用小于0×40的ASCII符号做一些特殊符号,这样就可以快速定位,且不用担心是某个汉字的另一半。Big5编码中也 存在相应问题。

        CP936和GBK的有些许差别,绝大多数情况下可以把CP936当作GBK的别名。

    GB18030

        GB18030编码向下兼容GBK和GB2312,兼容的含义是不仅字符兼容,而且相同字符的编码也相同。GB18030收录了所有Unicode3.1中的字符,包括中国少数民族字符,GBK不支持的韩文字符等等,也可以说是世界大多民族的文字符号都被收录在内。

        GBK和GB2312都是双字节等宽编码,如果算上和ASCII兼容所支持的单字节,也可以理解为是单字节和双字节混合的变长编码。GB18030编码是变长编码,有单字节、双字节和四字节三种方式。

    GB18030 的单字节编码范围是0x00-0x7F,完全等同与ASCII;双字节编码的范围和GBK相同,高字节是0x81-0xFE,低字节的编码范围是0x40 -0x7E和0x80-FE;四字节编码中第一、三字节的编码范围是0x81-0xFE,二、四字节是0x30-0x39。

        Windows 中CP936代码页使用0x80来表示欧元符号,而在GB18030编码中没有使用0x80编码位,用其他位置来表示欧元符号。这可以理解为是 GB18030向下兼容性上的一点小问题;也可以理解为0x80是CP936对GBK的扩展,而GB18030只是和GBK兼容良好。

    unicode

        每一种语言的不同的编码页,增加了那些需要支持不同语言的软件的复杂度。因而人们制定了一个世界标准,叫做unicode。unicode为每个字符提供 了唯一的特定数值,不论在什么平台上、不论在什么软件中,也不论什么语言。也就是说,它世界上使用的所有字符都列出来,并给每一个字符一个唯一特定数值。

        Unicode的最初目标,是用1个16位的编码来为超过65000字符提供映射。但这还不够,它不能覆盖全部历史上的文字,也不能解决传输的问题 (implantation head-ache's),尤其在那些基于网络的应用中。已有的软件必须做大量的工作来程序16位的数据。

        因 此,Unicode用一些基本的保留字符制定了三套编码方式。它们分别是UTF-8,UTF-16和UTF-32。正如名字所示,在UTF-8中,字符是 以8位序列来编码的,用一个或几个字节来表示一个字符。这种方式的最大好处,是UTF-8保留了ASCII字符的编码做为它的一部分,例如,在UTF-8 和ASCII中,“A”的编码都是0x41.

        UTF-16和UTF-32分别是Unicode的16位和32位编码方式。考虑到最初的目的,通常说的Unicode就是指UTF-16。在讨论Unicode时,搞清楚哪种编码方式非常重要。

    UTF-8

        Unicode Transformation Format-8bit,允许含BOM,但通常不含BOM。是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24为(三 个字节)来编码。UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。UTF-8编码的文字可以在各国支持UTF8字符集的浏览器上显 示。如,如果是UTF8编码,则在外国人的英文IE上也能显示中文,他们无需下载IE的中文语言支持包。

    GBK的文字编码是用双字节来表示的,即不论中、英文字符均使用双字节来表示,为了区分中文,将其最高位都设定成1。GBK包含全部中文字符,是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBD大。

        GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换:

        GBK、GB2312→Unicode→UTF8

        UTF8→Unicode→GBK、GB2312

        对于一个网站、论坛来说,如果英文字符较多,则建议使用UTF-8节省空间。不过现在很多论坛的插件一般只支持GBK。

    Windows的ANSI

        为使计算机支持更多语言,通常使用 0x80~0xFF 范围的 2 个字节来表示 1 个字符。比如:汉字 '中' 在中文操作系统中,使用 [0xD6,0xD0] 这两个字节存储。

      不同的国家和地区制定了不同的标准,由此产生了 GB2312, BIG5, JIS 等各自的编码标准。这些使用 2 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码。

      不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。

    展开全文
  • 如果你已经使用了一段时间PHP的话,那么,你应该已经对它的数组比较熟悉了——这种数据结构允许你在单个变量中存储多个值,并且可以把它们作为一个集合进行操作。 经常,开发人员发现在PHP中使用这种

    转自:http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/10/11/2207494.html,主要是看里面的usort的。


    如果你已经使用了一段时间PHP的话,那么,你应该已经对它的数组比较熟悉了——这种数据结构允许你在单个变量中存储多个值,并且可以把它们作为一个集合进行操作。

    经常,开发人员发现在PHP中使用这种数据结构对值或者数组元素进行排序非常有用。PHP提供了一些适合多种数组的排序函数,这些函数允许你在数组内部对元素进行排列,也允许用很多不同的方法对它们进行重新排序。在这篇文章中我们将讨论该排序中最重要的几个函数。

    简单排序

    首先,让我们来看看最简单的情况:将一个数组元素从低到高进行简单排序,这个函数既可以按数字大小排列也可以按字母顺序排列。PHP的sort()函数实现了这个功能,如Listing A所示:

    Listing A

    <?php

    Â $data = array(5,8,1,7,2);

    Â sort($data);

    Â print_r($data);

    Â ?>

    输出结果如下所示:

    Array ([0] => 1

    [1] => 2

    [2] => 5

    [3] => 7

    [4] => 8

    )

    也能使用rsort()函数进行排序,它的结果与前面所使用的sort()简单排序结果相反。Rsort()函数对数组元素进行从高到低的倒排,同样可以按数字大小排列也可以按字母顺序排列。Listing B给我们展示了它的一个例子:

    Listing B

    <?php $data = array(5,8,1,7,2);rsort($data); print_r($data);

    ?>

    它的输出结果如下:

    Array ([0] => 8

    [1] => 7

    [2] => 5

    [3] => 2

    [4] => 1

    )

    根据关键字排序

    当我们使用数组的时候,经常根据关键字对数组重新排序,从高到低。Ksort()函数就是根据关键字进行排序的函数,同时,它在排序的过程中会保持关键字的相关性。Listing C就是一个例子:

    Listing C

    <?php $data = array("US" => "United States", "IN" => "India", "DE" => "Germany", "ES" => "Spain");ksort($data); print_r($data);

    ?>

    它的输出结果如下:

    Array ([DE] => Germany

    [ES] => Spain

    [IN] => India

    [US] => United States

    )

    Krsort()函数是根据关键字对数组进行倒排,Listing D就是这样的例子:

    Listing D

    <?php $data = array("US" => "United States", "IN" => "India", "DE" => "Germany", "ES" => "Spain");krsort($data); print_r($data);

    ?>

    它的输出结果如下:

    Array ([US] => United States

    [IN] => India

    [ES] => Spain

    [DE] => Germany

    )

    根据值排序

    如果你想使用值排序来取代关键字排序的话,PHP也能满足你的要求。你只要使用asort()函数来代替先前提到的ksort()函数就可以了。如Listing E所示:

    Listing E

    <?php $data = array("US" => "United States", "IN" => "India", "DE" => "Germany", "ES" => "Spain");asort($data); print_r($data);

    ?>

    下面就是它的输出结果。请注意这个结果与上面使用ksort()函数所得到的结果的不同——在这两种情况中,都是按字母顺序进行排序的,但是它们是根据数组的不同字段进行排序的。

    同时,请注意关键字-值之间的联系会始终保持;它只是关键字-值对排序后的一种方式,排序并不会改变它们的对应关系。

    Array ([DE] => Germany

    [IN] => India

    [ES] => Spain

    [US] => United States

    )

    现在,你肯定能猜到这种排序也可以进行倒排,它使用arsort()函数完成这个功能。Listing F就是一个例子:

    Listing F

    <?php $data = array("US" => "United States", "IN" => "India", "DE" => "Germany", "ES" => "Spain");arsort($data); print_r($data);

    ?>

    下面是它的输出结果,根据值按字母表顺序进行倒排。将下面的结果与用krsort()函数进行倒排后生成的结果进行比较,就能很容易明白两者的不同了。

    Array ([US] => United States

    [ES] => Spain

    [IN] => India

    [DE] => Germany

    )

    自然语言排序

    PHP有一个非常独特的排序方式,这种方式使用认知而不是使用计算规则。这种特性称为自然语言排序,当创建模糊逻辑应用软件的时候这种排序方式非常有用。下面大家可以来看看它的一个简单例子,如Listing G所示:

    Listing G

    <?php $data = array("book-1", "book-10", "book-100", "book-5"); sort($data);print_r($data);

    natsort($data); print_r($data);?>

    它的输出结果如下:

    Array ([0] => book-1

    [1] => book-10

    [2] => book-100

    [3] => book-5

    )

    Array

    (

    [0] => book-1

    [3] => book-5

    [1] => book-10

    [2] => book-100

    )

    它们的不同已经很清楚了:第二个排序结果更直观,更“人性化”,然而第一个则更符合算法规则,更具“计算机”特点。

    自然语言能进行倒排吗?答案是肯定的!只要对natsort()的结果使用array_reverse()函数就可以了,Listing H就是一个简单例子:

    Listing H

    <?php $data = array("book-1", "book-10", "book-100", "book-5");natsort($data); print_r(array_reverse($data));

    ?>

    下面是它的输出结果:

    Array ([0] => book-100

    [1] => book-10

    [2] => book-5

    [3] => book-1

    )

    根据用户自定义的规则排序

    PHP也能让你定义自己的排序算法,你可以通过创建你自己的比较函数,并把它传递给usort()函数。如果第一个参数比第二个参数“小”的话,比较函数必须返回一个比0小的数,如果第一参数比第二个参数“大”的话,比较函数应该返回一个比0大的数。

    Listing I就是这样的一个例子,在这个例子中根据它们的长度对数组元素进行排序,最短的项放在最前面:

    Listing I

    <?php $data = array("joe@host.com", "john.doe@gh.co.uk", "asmithsonian@us.info", "jay@zoo.tw");usort($data, 'sortByLen');

    print_r($data); function sortByLen($a, $b) {

    if (strlen($a) == strlen($b)) {

    return 0;

    } else {

    return (strlen($a) > strlen($b)) ? 1 : -1;

    }

    }

    ?>

    这样,就创建了我们自己的比较函数,这个函数使用strlen()函数比较每一个字符串的个数,然后分别返回1,0或-1.这个返回值是决定元素排列的基础。下面是它的输出结果:

    Array ([0] => jay@zoo.tw

    [1] => joe@host.com

    [2] => john.doe@gh.co.uk

    [3] => asmithsonian@us.info

    )

    自然语言排序

    PHP有一个非常独特的排序方式,这种方式使用认知而不是使用计算规则。这种特性称为自然语言排序,当创建模糊逻辑应用软件的时候这种排序方式非常有用。下面大家可以来看看它的一个简单例子,如Listing G所示:

    Listing G

    <?php $data = array("book-1", "book-10", "book-100", "book-5"); sort($data);print_r($data);

    natsort($data); print_r($data);?>

    它的输出结果如下:

    Array ([0] => book-1

    [1] => book-10

    [2] => book-100

    [3] => book-5

    )

    Array

    (

    [0] => book-1

    [3] => book-5

    [1] => book-10

    [2] => book-100

    )

    它们的不同已经很清楚了:第二个排序结果更直观,更“人性化”,然而第一个则更符合算法规则,更具“计算机”特点。

    自然语言能进行倒排吗?答案是肯定的!只要对natsort()的结果使用array_reverse()函数就可以了,Listing H就是一个简单例子:

    Listing H

    <?php $data = array("book-1", "book-10", "book-100", "book-5");natsort($data); print_r(array_reverse($data));

    ?>

    下面是它的输出结果:

    Array ([0] => book-100

    [1] => book-10

    [2] => book-5

    [3] => book-1

    )

    根据用户自定义的规则排序

    PHP也能让你定义自己的排序算法,你可以通过创建你自己的比较函数,并把它传递给usort()函数。如果第一个参数比第二个参数“小”的话,比较函数必须返回一个比0小的数,如果第一参数比第二个参数“大”的话,比较函数应该返回一个比0大的数。

    Listing I就是这样的一个例子,在这个例子中根据它们的长度对数组元素进行排序,最短的项放在最前面:

    Listing I

    <?php $data = array("joe@host.com", "john.doe@gh.co.uk", "asmithsonian@us.info", "jay@zoo.tw");usort($data, 'sortByLen');

    print_r($data); function sortByLen($a, $b) {

    if (strlen($a) == strlen($b)) {

    return 0;

    } else {

    return (strlen($a) > strlen($b)) ? 1 : -1;

    }

    }

    ?>

    这样,就创建了我们自己的比较函数,这个函数使用strlen()函数比较每一个字符串的个数,然后分别返回1,0或-1.这个返回值是决定元素排列的基础。下面是它的输出结果:

    Array ([0] => jay@zoo.tw

    [1] => joe@host.com

    [2] => john.doe@gh.co.uk

    [3] => asmithsonian@us.info

    )

    多维排序

    最后,PHP也允许在多维数组上执行一些比较复杂的排序——例如,首先对一个嵌套数组使用一个普通的关键字进行排序,然后再根据另一个关键字进行排序。这与使用SQL的ORDER BY语句对多个字段进行排序非常相似。为了能更好的明白它是如何工作的,请仔细看Listing J所举的例子:

    Listing J

    <?php $data = array(array("id" => 1, "name" => "Boney M", "rating" => 3),

    array("id" => 2, "name" => "Take That", "rating" => 1),

    array("id" => 3, "name" => "The Killers", "rating" => 4),

    array("id" => 4, "name" => "Lusain", "rating" => 3),

    ); foreach ($data as $key => $value) {

    $name[$key] = $value['name'];

    $rating[$key] = $value['rating'];

    }

    array_multisort($rating, $name, $data); print_r($data);?>

    这里,我们在$data数组中模拟了一个行和列数组。然后,我使用array_multisort()函数对数据集合进行重排,首先是根据rating进行排序,然后,如果rating相等的话,再根据name排序。它的输出结果如下:

    Array ([0] => Array

    (

    [id] => 2

    [name] => Take That

    [rating] => 1

    ) [1] => Array

    (

    [id] => 1

    [name] => Boney M

    [rating] => 3

    )

    [2] => Array

    (

    [id] => 4

    [name] => Lusain

    [rating] => 3

    )

    [3] => Array

    (

    [id] => 3

    [name] => The Killers

    [rating] => 4

    )

    )

    array_multisort()函数是PHP中最有用的函数之一,它有非常广泛的应用范围。另外,就如你在例子中所看到的,它能对多个不相关的数组进行排序,也可以使用其中的一个元素作为下次排序的基础,还可以对数据库结果集进行排序。

    这些例子应该让你对PHP中各种数组排序函数的使用有了初步的了解,也向你展示了一些隐藏在PHP数组处理工具包的内部功能。

    转载自:http://yuninglovekefan.blog.sohu.com/134103390.html

     

    下面是对二位数组中的某个字段进行排序的两种方式方法:

    PHP对数组的某个字段排序方法1

    private function arrCmp($a,$b){  
    if($a['day_time'] == $b['day_time']){  
    return 0;
    }    
    return($a['day_time']<$b['day_time']) ? -1 : 1;
    }  
    使用方法:
    usort($new, array("DeveloperController", "arrCmp"));

    数组原型:
    Array (  
    [0] => Array ( [day_time] => 1291161600 [one_sum_click_num] => 2 [two_sum_click_num] => 2 )  
    [1] => Array ( [day_time] => 1291248000 [one_sum_click_num] => 7 [two_sum_click_num] => 5 )  
    [2] => Array ( [day_time] => 1291334400 [one_sum_click_num] => 4 )  
    [3] => Array ( [day_time] => 1291593600 [two_sum_click_num] => 2 ) ) )
    这样子根据其数组中的 day_time字段进行排序。
    下面是摘自php 手册上的说明。  
    对数据库结果进行排序 方法2
    本例中 data 数组中的每个单元表示一个表中的一行。这是典型的数据库记录的数据集合。 
    例子中的数据如下:
    volume | edition -------+-------- 67 | 2 86 | 1 85 | 6 98 | 2 86 | 6 67 | 7
     数据全都存放在名为 data 的数组中。这通常是通过循环从数据库取得的结果,例如 mysql_fetch_assoc()
    <?php
    $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
    );
    ?>
     本例中将把 volume 降序排列,把 edition 升序排列。 
    现在有了包含有行的数组,但是 array_multisort() 需要一个包含列的数组,因此用以下代码来取得列,然后排序。
    <?php
    // 取得列的列表
    foreach ($data as $key => $row
    {
        
    $volume[$key $row['volume'
    ];
        
    $edition[$key$row['edition'
    ];
    }

    // 将数据根据 volume 降序排列,根据 edition 升序排列
    // 把 $data 作为最后一个参数,以通用键排序
    array_multisort($volumeSORT_DESC$editionSORT_ASC$data
    );
    ?>
     数据集合现在排好序了,结果如下:
    volume | edition -------+-------- 98 | 2 86 | 1 86 | 6 85 | 6 67 | 2 67 | 7

    展开全文
  •  对于一以数据为中心的应用,数据库的好坏直接影响到程序的性能,因此数据库性能至关...一般来说,要保证数据库的效率,要做好以下四方面的工作:数据库设计、sql语句优化、数据库参数配置、恰当的硬件资源和
  • 八大排序算法

    万次阅读 多人点赞 2012-07-23 16:45:18
    排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 我们这里说说八大排序就是内部排序。 当n较大,则...
  • 《MySQL 入门教程》第 10 篇 数据排序

    千次阅读 2020-06-18 15:40:44
    介绍如何使用 ORDER BY 对查询结果进行排序显示,包括基于单个字段或者多个字段排序、基于表达式排序、空值排序、中文排序以及利用 FIELD 函数实现自定义排序。
  • MongoDB允许深入文档内部,对嵌套字段和数组建立索引;嵌套对象和数组字段可以和复合索引中的顶级字段一起使用,多数情况下与“正常”索引字段的行为也是一致的。 考虑以下文档集合(user ): db.user....
  • 可以基于一个或多个(取决于上下文,也称为例如由字段组成的)进行排序。 通常,可以基于属性对对象进行排序。 这样的组件或属性称为排序键。 例如,项目是书籍,排序键是标题,主题或作者,顺序是字母顺序。 ...
  • 在MySQL的SELECT语句中,可以使用Concat() 函数来拼接一个或多个列,多数DBMS使用 加号(+)或 双竖线(||)来实现拼接,拼接时各个串之间用逗号(,)分隔。 语法: SELECT Concat(字符串1或列名,字符串...
  • ElasticSearch 2 (15) - 深入搜索系列之多字段搜索
  • Django数据库字段类型(Field types) AutoField class AutoField(**options) ...它是一根据 ID 自增长的 IntegerField 字段。通常,你不必直接使用该字段。如果你没在别的字段上指定主键,Django 就
  • Order By文件排序和索引排序

    千次阅读 2017-07-30 17:39:24
    在MySQL中的ORDER BY有两种排序实现方式: 1、利用有序索引获取有序数据 2、文件排序 在使用explain分析查询的时候,利用有序索引获取... 取出满足过滤条件作为排序条件的字段,以及可以直接定位到行数据的行指针
  • 假设一个文件由这N个记录R1,R2,R3,…组成,所谓排序就是以记录中某个或者某几个字段值以增加或者减少的次序, 将这N个记录重新排序,其中该字段称为排序码,能够唯一标识一个记录的字段称为关键码。 2.内排序和...
  • Mysql哪些字段适合建立索引

    万次阅读 2020-06-26 21:34:19
    1 数据库建立索引常用的规则如下: 1、表的主键、外键必须有索引; 2、数据量超过300的表应该有索引; 3、经常与其他表进行连接的表,在连接字段上应该建立索引;...B 、复合索引的几个字段是否经常同时以AND
  • oracle 查询结果的排序,ASC/DESC,升序,降序,排序,ORDER BY,一些练习题 关键字: oracle 查询 结果 排序 asc desc 升序降序 列 order by一些 练习题 查询结果的排序 显示EMP表中不同的部门编号。 如果要在...
  • 在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证对应多个实体,或多张原始单证对应一个实体。  这里的实体可以理解为基本表。明确这种对应关系后,对我们设计录入界面大有好处。   〖例1〗...
  • 数据量很大的排序问题 大量数据如何排序

    万次阅读 多人点赞 2016-04-14 15:33:16
    数据量很大的排序问题 大量数据如何排序  【尊重原创,转载请注明出处】http://blog.csdn.net/guyuealian/article/details/51119499  同学某天参加腾讯面试,技术面的时候,面试官问了排序问题:   问题一:若有...
  • JIRA配置手册 (3):字段和界面

    千次阅读 2018-08-20 11:30:00
    作者:Misha 来源:原力注入在前面我们简单介绍了问题类型和工作流的配置方法,今天我们来聊一聊字段和界面这两互相依赖的家伙。界面即Issue展示给用户可见的表单页面,...
  • oracle查询排序asc/desc 列 order by

    千次阅读 2016-07-24 16:42:38
    转自:oracle查询排序asc/desc 列 order by 查询结果的排序  显示EMP表中不同的部门编号。  如果要在查询的同时排序显示结果,可以使用如下的语句:  Sql代码 SELECT 字段列表 FROM 表名...
  • db2排序概述

    2018-02-22 09:52:43
    在 DB2 数据库系统监控中,经常会遇到 CPU 资源使用过高问题,造成此类问题的原因很,但最主要的原因有两,第一是过多的逻辑 I/O 读取,第二就是过多的排序 (Sort),这两因素有时也称为 CPU 的两大杀手。...
  • 详细介绍了MySQL的Order By排序的底层原理与filesort排序,以及排序优化手段。
  • Solr学习笔记之在schema.xml中定义字段

    千次阅读 2015-01-30 23:22:11
    通过本文,你将学习到: solr中字段的概念 字段的必要属性 值的字段 动态字段 复制字段
  • 八大排序算法Java

    万次阅读 多人点赞 2016-07-06 17:57:40
    排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 我们这里说说八大排序就是内部排序。    当n较大...
  • 八大排序算法原理及实现

    万次阅读 多人点赞 2018-05-10 16:29:07
    排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 我们这里说说八大排序就是内部排序。    当n较大...
  • Java 8 API添加了一新的抽象称为流Stream,可以让你以一种声明的方式处理数据。 Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。 Stream API可以极大...
  • ElasticSearch-排序

    2019-05-30 00:27:00
    阅读目录 一、排序 二、字符串排序 三、 相关性 四、数据字段 ...一、排序 ...相关性排序 ...默认情况下,结果集会按照相关性进行排序 -- 相关性越高,排名越靠前。...为了使结果可以按照相关性进行排序,我们需要一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 99,975
精华内容 39,990
关键字:

多个字段进行排序称为