本文目錄一覽:
- 1、PHP實現的自定義數組排序函數與排序類示例
- 2、php如何排序置頂
- 3、PHP實現常見的排序算法
- 4、php幾種排序算法實例詳解
- 5、php實現數組按指定KEY排序的方法
- 6、thinkphp如何實現快速排序
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,…’)….;
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/238678.html