首页 > 编程知识 正文

PHP排序函数,php数组自定义排序

时间:2023-05-03 22:58:22 阅读:258537 作者:2126

sort /  rsort

对数组排序

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

本函数对数组进行排序。当本函数结束时数组单元将被从最低到最高重新安排

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

本函数对数组进行逆向排序(最高到最低)

array

要排序的数组。

sort_flags

可选的第二个参数 sort_flags 可以用以下值改变排序的行为:

排序类型标记:

SORT_REGULAR – 正常比较单元(不改变类型)

SORT_NUMERIC – 单元被作为数字来比较

SORT_STRING – 单元被作为字符串来比较

SORT_LOCALE_STRING – 根据当前的区域(locale)设置来把单元当作字符串比较,可以用 setlocale() 来改变。

SORT_NATURAL – 和 natsort() 类似对每个单元以“自然的顺序”对字符串进行排序。 PHP 5.4.0 中新增的。

SORT_FLAG_CASE – 能够与 SORT_STRING 或 SORT_NATURAL 合并(OR 位运算),不区分大小写排序字符串。

ksort  / krsort

对数组按照键名排序

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

对数组按照键名排序,保留键名到数据的关联。本函数主要用于关联数组。

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

对数组按照键名逆向排序,保留键名到数据的关联。主要用于结合数组。

array

要排序的数组。

sort_flags

可以用可选参数 sort_flags 改变排序的行为,见上

asort  /arsort

对数组进行排序并保持索引关系

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

本函数对数组进行排序,数组的索引保持和单元的关联。主要用于对那些单元顺序很重要的结合数组进行排序。

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

本函数对数组进行排序,数组的索引保持和单元的关联。主要用于对那些单元顺序很重要的结合数组进行排序。

array

要排序的数组。

sort_flags

可以用可选参数 sort_flags 改变排序的行为,见上

natsort

用“自然排序”算法对数组排序

bool natsort ( array &$array )

本函数实现了一个和人们通常对字母数字字符串进行排序的方法一样的排序算法并保持原有键/值的关联,这被称为“自然排序”。本算法和通常的计算机字符串排序算法(用于 sort())的区别见下面示例。

array

要排序的数组。

运行实例:

$array1 = $array2 = array("img12.png", "img10.png", "img2.png", "img1.png");

asort($array1);

echo "Standard sortingn";

print_r($array1);

natsort($array2);

echo "nNatural order sortingn";

print_r($array2);

?>

运行结果:

Standard sorting

Array

(

[3] => img1.png

[1] => img10.png

[0] => img12.png

[2] => img2.png

)

Natural order sorting

Array

(

[3] => img1.png

[2] => img2.png

[1] => img10.png

[0] => img12.png

)

array_reverse

返回一个单元顺序相反的数组

array array_reverse ( array $array [, bool $preserve_keys = false ] )/pre>

array_reverse() 接受数组 array 作为输入并返回一个单元为相反顺序的新数组。

array输入的数组。

preserve_keys 如果设置为 TRUE 会保留数字的键。 非数字的键则不受这个设置的影响,总是会被保留。

usort

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

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

本函数将用用户自定义的比较函数对一个数组中的值进行排序。如果要排序的数组需要用一种lsdlc标准进行排序,那么应该使用此函数。

Note:

如果两个成员比较结果相同,则它们在排序后的数组中的顺序未经定义。

Note:

此函数为 array 中的元素赋与新的键名。这将删除原有的键名,而不是仅仅将键名重新排序。

array输入的数组

cmp_function

在第一个参数小于,等于或大于第二个参数时,该比较函数必须相应地返回一个小于,等于或大于 0 的整数。

运行实例:

function cmp($a, $b)

{

if ($a == $b) {

return 0;

}

return ($a < $b) ? -1 : 1;

}

$a = array(3, 2, 5, 6, 1);

usort($a, "cmp");

foreach ($a as $key => $value) {

echo "$key: $valuen";

}

?>

运行结果:

0: 1

1: 2

2: 3

3: 5

4: 6

array_multisort

对多个数组或多维数组进行排序

bool array_multisort ( array &$arr [, mixed $arg = SORT_ASC [, mixed $arg = SORT_REGULAR [,mixed $... ]]] )

array_multisort() 可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序。关联(string)键名保持不变,但数字键名会被重新索引。

排序顺序标志:

SORT_ASC – 按照上升顺序排序

SORT_DESC – 按照下降顺序排序

排序类型标志:

SORT_REGULAR – 将项目按照通常方法比较

SORT_NUMERIC – 将项目按照数值比较

SORT_STRING – 将项目按照字符串比较

每个数组之后不能指定两个同类的排序标志。每个数组后指定的排序标志仅对该数组有效 – 在此之前为默认值 SORT_ASC 和 SORT_REGULAR。

输入数组被当成一个表的列并以行来排序——这类似于 SQL 的 ORDER BY 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话就按照下一个输入数组中相应值的大小来排序,依此类推。

运行实例:

$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,SORT_ASC,SORT_NUMERIC, $name,SORT_ASC,SORT_STRING, $data);

print_r($data);

?>

运行结果:

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。