资讯专栏INFORMATION COLUMN

数组排序函数-php数组函数(一)

call_me_R / 1770人阅读

摘要:下列的所有排序函数都是直接作用于数组本身,而不是返回一个新的有序的数组。倒序并保持索引关系,按键名排序按键名倒序使用用户自定义的比较函数对数组中的值进行排序,要排序的数组需要用一种不寻常的标准进行排序,那么应该使用此函数。

数组排序,共13个

函数中有u的,能自定义比较函数;有k的,按照键来排序;有r(reverse)的,倒序;有a(association)的,一定是键值关联,除了rsort() usort() sort() shuffle(),其他没有a的都是键值关联,array_multisort()键值关联的保持,数字类型的不保持。

下列的所有排序函数都是直接作用于数组本身, 而不是返回一个新的有序的数组。

以下函数对于数组中相等的元素,它们在排序后的顺序是未定义的。 (也即相等元素之间的顺序是不稳定的,即具有相同值的元素每次排序的结果都是不确定(关联数组))。php7asort arsort uasort已实现稳定排序,php5稳定排序:http://php.net/manual/zh/func...

在对含有混合类型值的数组排序时要小心,因为 sort() 可能会产生不可预知的结果。

1.array_multisort

可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序。

bool array_multisort ( array &$array1 [, mixed $array1_sort_order = SORT_ASC [, mixed $array1_sort_flags = SORT_REGULAR [, mixed $... ]]] )

排序类型标志:

SORT_REGULAR (默认)- 将项目按照通常方法比较(不修改类型,区分大小写,大写字母会排在小写字母之前)

SORT_NUMERIC - 按照数字大小比较

SORT_STRING - 按照字符串比较(区分大小写)

SORT_LOCALE_STRING - 根据当前的本地化设置,按照字符串比较。 它会使用 locale 信息,可以通过 setlocale() 修改此信息。

SORT_NATURAL - 以字符串的"自然排序",类似 natsort()

SORT_FLAG_CASE - 可以组合 (按位或 OR) SORT_STRING 或者 SORT_NATURAL 大小写不敏感的方式排序字符串。

1.1 如果有多个数组参数时, $array2会根据$array1的结果排序,像MySQL的group by

1.2 不区分大小写的排序:

$array = array("Alpha", "atomic", "Beta", "bank");
$array_lowercase = array_map("strtolower", $array); // 先复制一个转为小写数组

array_multisort($array_lowercase, SORT_ASC, SORT_STRING, $array);   // 先对小写数组排序,再排序原数组

print_r($array);

1.3 对数据库结果进行排序

function array_orderby()
{
    $args = func_get_args();
    $data = array_shift($args);
    foreach ($args as $n => $field) {
        if (is_string($field)) {
            $tmp = array();
            foreach ($data as $key => $row)
                $tmp[$key] = $row[$field];
            $args[$n] = $tmp;
            }
    }
    $args[] = &$data;
    call_user_func_array("array_multisort", $args);
    return array_pop($args);
}
2.sort

删除原有的键名对数组排序(顺序)

bool sort ( array &$array [, int $sort_flags = SORT_REGULAR ] )

sort($fruits, SORT_NATURAL | SORT_FLAG_CASE);排序结果和natcasesort()一样。

3.rsort

对数组逆向排序

bool rsort ( array &$array [, int $sort_flags = SORT_REGULAR ] )
4.asort

保持键值关联(association)。主要用于对那些单元顺序很重要的结合数组进行排序。

bool asort ( array &$array [, int $sort_flags = SORT_REGULAR ] )
5.arsort

倒序并保持索引关系(association,reverse)

bool arsort ( array &$array [, int $sort_flags = SORT_REGULAR ] )
6.ksort

键名排序

bool ksort ( array &$array [, int $sort_flags = SORT_REGULAR ] )
7.krsort

键名倒序

bool krsort ( array &$array [, int $sort_flags = SORT_REGULAR ] )
8.usort

使用用户自定义的比较函数对数组中的进行排序,要排序的数组需要用一种不寻常的标准进行排序,那么应该使用此函数。

bool usort ( array &$array , callable $value_compare_func )

$value_compare_func( mixed $a, mixed $b ) $a小于,等于或大于$b时,该比较函数必须相应地返回一个小于,等于或大于 0 的整数。

usort($a, array("TestObj", "cmp_obj"))对象属性排序

在类中调用:uasort($array, array($this,"value_compare_func"))

9.uasort

使用用户自定义的比较函数对数组中的值进行排序并保持索引关联

bool uasort ( array &$array , callable $value_compare_func )
10.uksort

使用用户自定义的比较函数对数组中的键名进行排序

bool uksort ( array &$array , callable $key_compare_func )
11.natcasesort

不区分大小写字母的自然排序(排完字母再排数字),保持键值关联

bool natcasesort ( array &$array )
12.natsort

用“自然排序”算法对数组排序,保持键值关联

bool natsort ( array &$array )
13.shuffle

本函数打乱(随机排列单元的顺序)一个数组。键值不关联

bool shuffle ( array &$array )

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/29101.html

相关文章

  • 10个必须掌握的PHP关联数组使用技巧

    摘要:额外的数组元素可以象下面这样追加如果你正在处理数字索引数组,你可能想使用显示命名的函数前置和追加元素,如和函数,但这些函数不能操作关联数组。 在使用 PHP 进行开发的过程中,或早或晚,您会需要创建许多相似的变量,这时候你可以把数据作为元素存储在数组中。数组中的元素都有自己的 ID,因此可以方便地访问它们。 关联数组 关联数组,它的每个 ID 键都关联一个值。在存储有关具体命名的值的数...

    bawn 评论0 收藏0
  • [讨论]php 排序系列的函数内部的C实现是用了哪种排序算法?

    摘要:在算法中,比快速排序还快的,无疑是基数排序,粗略看了一下算法,可能是基础排序中的桶排序。桶排序是稳定的桶排序是常见排序里最快的一种,比快排还要快大多数情况下桶排序非常快,但是同时也非常耗空间以空间换时间 ext/standard/php_array.h https://github.com/php/php-src/blob/master/ext/standard/php_array....

    chanthuang 评论0 收藏0
  • PHP面试:尽可能多的说出你知道的排序算法

    摘要:良好的排序算法具有进行最少的比较和交换的特征。冒泡排序是一个基于比较的排序算法,被认为是效率最低的排序算法之一。现在让我们使用实现冒泡排序算法。插入排序到目前为止,我们已经看到了两种基于比较的排序算法。 预警 本文适合对于排序算法不太了解的新手同学观看,大佬直接忽略即可。因为考虑到连贯性,所以篇幅较长。老铁们看完需要大概一个小时,但是从入门到完全理解可能需要10个小时(哈哈哈,以我自己...

    objc94 评论0 收藏0
  • php 二维数组排序

    摘要:前提给定一个二维数组,请根据指定的数组写出最优的排序。排序条件,指定数组如下估计大家都没有什么问题,排序嘛,简单的不要不要的方式一这应该是最简单的方式了,直接使用现成的函数,快捷的不要不要的。 前提 给定一个二维数组,请根据指定的数组key,写出最优的排序。排序条件age asc,sex desc,指定数组如下: $arr = [ [id=>1, age=>1,...

    ashe 评论0 收藏0
  • PHP入门数组操作详解

    摘要:像其他变量一样,使用运算符可以改变数组元素的内容。数组的基本操作定义数组在中声明数组的方式主要有两种用函数声明数组,直接为数组元素赋值。 概述要访问一个变量的内容,可以直接使用其名称。如果该变量是一个数组,可以使用变量名称和关键字或索引的组合来访问其内容。 像其他变量一样,使用运算符=可以改变数组元素的内容。数组单元可以通过 array[key] 语法来访问。showImg(https...

    ?xiaoxiao, 评论0 收藏0

发表评论

0条评论

call_me_R

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<