php

位置:IT落伍者 >> php >> 浏览文章

PHP数组排序函数合集 以及它们之间的联系分析


发布日期:2018年08月19日
 
PHP数组排序函数合集 以及它们之间的联系分析

下边提到的几个数组函数的排序有一些共性
数组被作为排序函数的参数排序以后数组本身就发生了改变函数的返回值为bool类型
函数名中出现单a表示association含义为在按值排序的过程中保持key=>value的对应关系不变
函数名中出现单k表示key含义为在按值排序的过程中按照数组key而不是数组的值排序
函数名中出现单r的表示reverse含义为按照跟不加r的相反的顺序排列
函数名中出现单u的表示userdefined含义为使用用户自定义函数排序如果函数的逻辑是参数<参数返回负数则按照升序排列(p返负升)
sort函数升序排序

复制代码 代码如下:
bool sort ( array &$array [ int $sort_flags= SORT_REGULAR ] )
<?php
$fruits = array("lemon" "orange" "banana" "apple");
sort($fruits);
var_dump($fruits);
?>
结果
array
=>
string
apple (length=)
=>
string
banana (length=)
=>
string
lemon (length=)
=>
string
orange (length=)


rsort降序排列

复制代码 代码如下:
<?php
$fruits = array("lemon" "orange" "banana" "apple");
rsort($fruits);
var_dump($fruits);
?>
结果
array
=>
string
orange (length=)
=>
string
lemon (length=)
=>
string
banana (length=)
=>
string
apple (length=)


asort按照二维数组值的升序排列(保持key=>value的关联关系)

复制代码 代码如下:
<?php
$fruits = array("d" => "lemon" "a" => "orange" "b" => "banana" "c" => "apple");
asort($fruits);
var_dump($fruits);
?>
结果
array
c =>
string
apple (length=)
b =>
string
banana (length=)
d =>
string
lemon (length=)
a =>
string
orange (length=)


arsort按照二维数组值的降序排列(保持key=>value的关联关系)

复制代码 代码如下:
<?php
$fruits = array("d" => "lemon" "a" => "orange" "b" => "banana" "c" => "apple");
arsort($fruits);
var_dump($fruits);
?>
结果
array
a =>
string
orange (length=)
d =>
string
lemon (length=)
b =>
string
banana (length=)
c =>
string
apple (length=)


ksort按照数组的key升序排列

复制代码 代码如下:
<?php
$fruits = array("d"=>"lemon" "a"=>"orange" "b"=>"banana" "c"=>"apple");
ksort($fruits);
var_dump($fruits);
?>
结果
array
a =>
string
orange (length=)
b =>
string
banana (length=)
c =>
string
apple (length=)
d =>
string
lemon (length=)


krsort按照数组key的降序排列

复制代码 代码如下:
<?php
$fruits = array("d"=>"lemon" "a"=>"orange" "b"=>"banana" "c"=>"apple");
krsort($fruits);
var_dump($fruits);
?>
array
d =>
string
lemon (length=)
c =>
string
apple (length=)
b =>
string
banana (length=)
a =>
string
orange (length=)


usort函数按照用户自定义的函数排序

复制代码 代码如下:
<?php
function cmp($a $b)
{
if ($a == $b) {
return ;
}
return ($a < $b) ? : ;
}
$a = array( );
usort($a "cmp");
var_dump($a);
?>


结果
array
=>
int

=>
int

=>
int

=>
int

=>
int

uksort使用自定义函数按照数组的key排序

复制代码 代码如下:
<?php
function cmp($a $b)
{
$a = preg_replace(@^(a|an|the) @ $a);
$b = preg_replace(@^(a|an|the) @ $b);
return strcasecmp($a $b);
}
$a = array("John" => "the Earth" => "an apple" => "a banana" => );
uksort($a "cmp");
var_dump($a);
?>


结果
array
an apple =>
int

a banana =>
int

the Earth =>
int

John =>
int

uasort将数组用自定义函数按照value排序保持索引关系不变

复制代码 代码如下:
<?php
// Comparison function
function cmp($a $b) {
if ($a == $b) {
return ;
}
return ($a < $b) ? : ;
}
// Array to be sorted
$array = array(a => b => c => d => e => f => g => h => );
var_dump($array);
// Sort and print the resulting array
uasort($array cmp);
var_dump($array);
?>


结果
array
a =>
int

b =>
int

c =>
int

d =>
int

e =>
int

f =>
int

g =>
int

h =>
int

array
d =>
int

h =>
int

c =>
int

e =>
int

g =>
int

a =>
int

f =>
int

b =>
int

array_multisort排序多个数组或多维数组

复制代码 代码如下:
<?php
$ar = array(
array("" "a")
array(      ""      )
);

array_multisort($ar[] SORT_ASC SORT_STRING
$ar[] SORT_NUMERIC SORT_DESC);
var_dump($ar);
?>


结果
array
=>
array
=>
string
(length=)
=>
int

=>
int

=>
int

=>
string
a (length=)
=>
array
=>
int

=>
int

=>
string
(length=)
=>
int

=>
int

//说明
上例中$ar数组优先按照$ar[]的字符串值升序排列如果字符串值相等再按照$ar[]数组的数字值降序排列
array_multisort函数的任意一个位置的参数如果是数组表示排序时用的值
如果有多个数组参数优先按照前边的数组值进行排序如果是常量例如
SORT_ASC SORT_DESC SORT_REGULARSORT_NUMERIC SORT_STRING
表示排序方法(数组取值前优先)
==========================================================================================
PHP二维数组排序函数
PHP一维数组的排序可以用sort()asort()arsort()等函数但是PHP二维数组的排序需要自定义
以下函数是对一个给定的二维数组按照指定的键值进行排序先看函数定义

复制代码 代码如下:
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=>)
array(name=>笔记本电脑brand=>lenovoprice=>)
array(name=>剃须刀brand=>飞利浦price=>)
array(name=>跑步机brand=>三和松石price=>)
array(name=>手表brand=>卡西欧price=>)
array(name=>液晶电视brand=>索尼price=>)
array(name=>激光打印机brand=>惠普price=>)
);
$ShoppingList = array_sort($arrayprice);
print_r($ShoppingList);


上面是对$array这个二维数组按照price从低到高的排序
输出结果(略)

               

上一篇:PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解

下一篇:PHP网站发开实用技巧集锦