PHPphp排序集合

若果你早已拔取了一段时间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($volume, SORT_DESC, $edition, SORT_ASC, $data);?>
 数据集合现在排好序了,结果如下:
volume | edition -------+-------- 98 | 2 86 | 1 86 | 6 85 | 6 67 | 2 67 | 7

 

 

 

相关文章