您的位置:

php排序的实现,php根据字段排序

本文目录一览:

PHP实现的自定义数组排序函数与排序类示例

本文实例讲述了PHP实现的自定义数组排序函数与排序类。分享给大家供大家参考,具体如下:

/*

*

二维数组自定义排序函数

*

uasort($arr,function_name)

*

**/

$arr

=

array(

array('a'=1,'b'='c'),

array('a'=4,'b'='a'),

array('a'=5,'b'='g'),

array('a'=7,'b'='f'),

array('a'=6,'b'='e')

);

function

compare_arr($x,$y){

if($x['b']$y['b']){

return

-1;

}else

if($x['b']$y['b']){

return

1;

}else{

return

0;

}

}

uasort($arr,'compare_arr');

foreach($arr

as

$a){

echo

$a['a'].'='.$a['b'].'br/';

}

手册里的自定义排序类:

class

multiSort

{

var

$key;

//key

in

your

array

//排序函数

参数依次是

数组

待排列索引

排序类型

function

run

($myarray,

$key_to_sort,

$type_of_sort

=

'')

{

$this-key

=

$key_to_sort;

if

($type_of_sort

==

'desc')

uasort($myarray,

array($this,

'myreverse_compare'));

else

uasort($myarray,

array($this,

'mycompare'));

return

$myarray;

}

//正序

function

mycompare($x,

$y)

{

if

(

$x[$this-key]

==

$y[$this-key]

)

return

0;

else

if

(

$x[$this-key]

$y[$this-key]

)

return

-1;

else

return

1;

}

//逆序

function

myreverse_compare($x,

$y)

{

if

(

$x[$this-key]

==

$y[$this-key]

)

return

0;

else

if

(

$x[$this-key]

$y[$this-key]

)

return

-1;

else

return

1;

}

}

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP数组(Array)操作技巧大全》、《php排序算法总结》、《php字符串(string)用法总结》、《PHP针对XML文件操作技巧总结》、《PHP错误与异常处理方法总结》、《PHP运算与运算符用法总结》、《PHP基本语法入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

php如何排序置顶

 第一步,在文章表里面建两个字段,用于做置顶功能。一个是top字段,timestamp类型,默认选“定义”,用于存储置顶操作的时间;还有一个flag字段,int类型,用于判断是否置顶,置顶为1,否则为0。。

第二步,模板页面修改。列表选项里面加置顶列,下面对应的行写如下代码:

td class="center" {{if $logs[data].flag}} a href="JavaScript:void(0);" onclick="istop('{{$logs[data].id}}',0)"取消置顶/a{{else}} a href="javascript:void(0);" onclick="istop('{{$logs[data].id}}',1)"置顶/a{{/if}}/td

就是用flag判断是否置顶了。

页面对应的置顶js:

function istop(id,flag){

$.ajax({

type: "POST",

url: "?m={{'article'|encrypt}}a=savePost",data: "id="+id+"flag="+flag,

dataType:"json",

success: function(msg){

if(msg.status == "true")

{

window.location= '?m={{'article'|encrypt}}';}

else

{

alert(msg.message);

}

}

});

}

第三步,程序里只要稍作修改即可。先按是否置顶排序,再按置顶时间排序,再按默认的排序。

$sql .=" ORDER BY flag DESC,top DESC,id DESC ";(还记得我们添加的字段吗?)

这样就完成了文章置顶的功能。

PHP实现常见的排序算法

注:为方便描述,下面的排序全为正序(从小到大排序)

假设有一个数组[a,b,c,d]

冒泡排序依次比较相邻的两个元素,如果前面的元素大于后面的元素,则两元素交换位置;否则,位置不变。具体步骤:

1,比较a,b这两个元素,如果ab,则交换位置,数组变为:[b,a,c,d]

2,比较a,c这两个元素,如果ac,则位置不变,数组变为:[b,a,c,d]

3,比较c,d这两个元素,如果cd,则交换位置,数组变为:[b,a,d,c]

完成第一轮比较后,可以发现最大的数c已经排(冒)在最后面了,接着再进行第二轮比较,但第二轮比较不必比较最后一个元素了,因为最后一个元素已经是最大的了。

第二轮比较结束后,第二大的数也会冒到倒数第二的位置。

依次类推,再进行第三轮,,,

就这样最大的数一直往后排(冒),最后完成排序。所以我们称这种排序算法为冒泡排序。

选择排序是一种直观的算法,每一轮会选出列中最小的值,把最小值排到前面。具体步骤如下:

插入排序步骤大致如下:

快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来,且在大部分真实世界的数据,可以决定设计的选择,减少所需时间的二次方项之可能性。

步骤:

从数列中挑出一个元素,称为 “基准”(pivot),

重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。

递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

php几种排序算法实例详解

下面给你介绍四种排序方法:

1) 插入排序(Insertion Sort)的基本思想是: 

每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。实现代码如下:

2) 选择排序(Selection Sort)的基本思想是: 

每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕。实现代码如下:

3) 冒泡排序的基本思想是: 

两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。实现代码如下:

4) 快排也是一个高效的排序算法,它的时间复杂度也是O(nlogn)。原理是:选择一个基准元素,然后把数组中小于这个元素的元素放在基准元素左边,大于它的,放在基准元素右边。然后对这两边继续同样的操作。代码如下:

php实现数组按指定KEY排序的方法

本文实例讲述了php实现数组按指定KEY排序的方法。分享给大家供大家参考。具体实现方法如下:

function

array_sort($arr,$keys,$orderby='asc'){

$keysvalue

=

$new_array

=

array();

foreach

($arr

as

$k=$v){

$keysvalue[$k]

=

$v[$keys];

}

if($orderby==

'asc'){

asort($keysvalue);

}else{

arsort($keysvalue);

}

reset($keysvalue);

foreach

($keysvalue

as

$k=$v){

$new_array[]

=

$arr[$k];

}

return

$new_array;

}

希望本文所述对大家的php程序设计有所帮助。

thinkphp如何实现快速排序

thinkphp使用的数据库是mysql,mysql多个字段排序的语句:

select

* from `表名` where 条件 order by 字段1 desc,字段2

asc,...

thinkphp中排序方法为

$User-where('score0')-order('score desc')....;

但是例子中只能单字段排序,不过可以理解成字符串,那就可以这样写试试

$User-where('score0')-order('score desc,id asc,...')....;