導航:首頁 > 編程語言 > php表格的排序

php表格的排序

發布時間:2023-03-05 08:24:19

php實現常見的排序演算法

註:為方便描述,下面的排序全為正序(從小到大排序)

假設有一個數組[a,b,c,d]
冒泡排序依次比較相鄰的兩個元素,如果前面的元素大於後面的元素,則兩元素交換位置;否則,位置不變。具體步驟:
1,比較a,b這兩個元素,如果a>b,則交換位置,數組變為:[b,a,c,d]
2,比較a,c這兩個元素,如果a<c,則位置不變,數組變為:[b,a,c,d]
3,比較c,d這兩個元素,如果c>d,則交換位置,數組變為:[b,a,d,c]
完成第一輪比較後,可以發現最大的數c已經排(冒)在最後面了,接著再進行第二輪比較,但第二輪比較不必比較最後一個元素了,因為最後一個元素已經是最大的了。
第二輪比較結束後,第二大的數也會冒到倒數第二的位置。
依次類推,再進行第三輪,,,
就這樣最大的數一直往後排(冒),最後完成排序。所以我們稱這種排序演算法為冒泡排序。

選擇排序是一種直觀的演算法,每一輪會選出列中最小的值,把最小值排到前面。具體步驟如下:

插入排序步驟大致如下:

快速排序是由東尼·霍爾所發展的一種排序演算法。在平均狀況下,排序 n 個項目要Ο(n log n)次比較。在最壞狀況下則需要Ο(n2)次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他Ο(n log n) 演算法更快,因為它的內部循環(inner loop)可以在大部分的架構上很有效率地被實現出來,且在大部分真實世界的數據,可以決定設計的選擇,減少所需時間的二次方項之可能性。

步驟:
從數列中挑出一個元素,稱為 「基準」(pivot),
重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面(相同的數可以到任一邊)。在這個分區退出之後,該基準就處於數列的中間位置。這個稱為分區(partition)操作。
遞歸地(recursive)把小於基準值元素的子數列和大於基準值元素的子數列排序。

Ⅱ PHP 表格如何循環橫向排列

在相應的元素的class中給定在CSS文件中定義不同的樣式類
例如:
1.樣式文件style.css
...
.Style1{background:#000;}
.Style2{background:#FFF;}
...
2.程序文件(php)
============================
那樣只要判斷一下就可以了
判斷一下輸出為空的情況,什麼都不輸出

Ⅲ mysql+php中2張表如何做排序寫出

select a.newsid , b.data , b.acid from 表A as a , 表2 as b where a.id = b.id and a.id = 1 order by a.date desc
原本我是想這么寫的
但是看到你的兩個表都有date
我就傻了
我只能說這得看你的需求是需要按照那個時間來派
不可能是兩個時間都要
除非是根據時間差來排序
就好像你這個用戶是在13333注冊成功的
而你這個用戶是在14221發布的新聞
你就得根據這個14221來排這個新聞
而不是用戶注冊成功的時間

Ⅳ 常見的php排序演算法

常見的php排序演算法

本文匯總了常見的php排序演算法,在進行演算法設計的時候有不錯的借鑒價值。現分享給大家供參考之用。具體如下:

一、插入排序

用文字簡單的描述,比如說$arr = array(4,2,4,6,3,6,1,7,9); 這樣的一組數字進行順序排序:

那麼,首先,拿數組的第二個元素和第一元素比較,假如第一個元素大於第二元素,那麼就讓兩者位置互換,接下來,拿數組的第三個元素,分別和第二個,第一個元素比較,假如第三個元素小,那麼就互換。依次類推。這就是插入排序,它的時間頻度是:1+2+...+(n-1)=(n^2)/2。則它的時間復雜度為O(n^2).

php實現代碼如下:

<?phpfunction Sort($arr){ $count = count($arr); if($count<2){ return $arr; } for($i=1;$i<$count;$i++){ tmp="$arr[$i];" j="">=0&&$arr[$j]<$arr[$i]){ return="">

二、選擇排序

選擇排序用語言描述的話,可以這樣,如:$arr = array(4,3,5,2,1);

首先,拿第一個和後面所有的比,找出最小的那個數字,然後和第一個數組互換(當然,如果是第一個最小,那麼就不用互換了),接著循環,即:拿第二個和後面的比較,找出最小的數字,然後和第二個數字互換,依次類推,也就是說每次都是找出剩餘最小的值。 可得到:第一次,時間頻度 是n, (第一個和後面的n-1個比較,找到最小的,再看是不是第一個,不是第一個的話進行互換) 在往後,依次是 減一 。 它的時間復雜度,也是O(n^2);

php實現代碼如下:

<?phpfunction selectSort($arr){ $count = count($arr); if($count<2){ return $arr; } for($i=0;$i<$count;$i++){ $min=$i; for(j=$i+1;$j<$count;$j++){>$arr[$j]){ $min = $j; //找到最小的那個元素的下標 } } if($min!=$i){//如果下標不是$i 則互換。 $tmp= $arr[$i]; $arr[$i] = $arr[$min]; $arr[$min] = $tmp; } } return $arr; }?>

三、冒泡排序

冒泡排序其實上是和選擇排序相比,並無明顯差別。都是找到最小的,放到最左端。依次循環解決問題。差別在於冒泡排序的交換位置的次數較多,而選擇排序則是找到最小的元素的下標,然後直接和最左端的交換位置。

php實現代碼如下:

<?phpfunction selectSort($arr){ $count = count($arr); if($count<2){ return $arr; } for($i=0;$i<$count;$i++){ for(j=$i+1;$j<$count;$j++){>$arr[$j]){ $tmp= $arr[$i]; $arr[$i] = $arr[$i]; $arr[$i] = $tmp; } } } return $arr; }?>

四、快速排序

快速排序,用語言來形容的話,從數組中選擇一個值$a,然後和其餘元素進行比較,比$a大的放到數組right中,反之,放到數組left中。然後將left right 分別進行遞歸調用,即:再細分left right ,最後進行數組的合並。

php實現快速排序:

<?phpfunction mySort($arr){ $count = count($arr); if($count<2){ return $arr; } $key = $arr[0];//選擇第一個元素作為比較元素,可選其他 $left = array(); $right = array(); for($i=1;$i<$count;$i++){ key="">=$arr[$i]){ $left[] = $arr[$i]; }else{ $right[] = $arr[$i]; } } $left = mySort($left); $right = mySort($right); $result = array_merge($left,$right); return $result; }?>

五、歸並排序

其實歸並排序是一種拆分,合並的思想。和快速排序思想有共通之處,左邊一堆,右邊一堆,然後進行合並。通過遞歸實現排序。 區別之處呢? 他們的區別也是思想上本質的區別,快速排序的拆分,是選擇了特定的值進行大小比較,從而分為left 和 right 。也就是小的一堆放入left,大的一堆放入right。而後,小的left 再細分為left1 right1。。。。通過進行類似的遞歸完成排序。也就是說,一直細分下去,遞歸最末尾的left1就是最小值。

而歸並排序,是從幾何上的左右切分,一直遞歸切分成2或者1的'最小粒度的數組,然後才開始進行比較大小,然後合並。此處的比較大小是:兒子left的元素 和兒子的right元素 進行比較,而後進行排序合並成為父親left或者right。在此,直到拿到各自排序合並完成最後兩個數組:最起初的left 和right,也僅僅直到他們各自的順序,並不能確認整個數組的順序,還是需要通過最終的left right 比較後合並才能完成真正意義上的排序。

<?phpfunction gbSort($arr){ if(count($arr)<=1){return min="floor(count($arr)/2);//取中間數字進行拆分" left="gbSort($left);" right="gbSort($right);" return="" function="">$right[0] ? array_shift($right) : array_shift($left); //進行比較,小的移除,並且放入到數組$m中。 } return arr_merge($m,$left,$right);//進行合並(由於不知道left right 哪個會為空,所以進行統一合並)}?>

六、堆排序

本例中fixDown函數實現對某一個節點的向下調整,這里默認的是起始節點為1,方便計算父子節點關系

注:

起始節點為1的父子關系: 父節點k, 子節點為2K、2k+1 子節點j, 父節點為 floor(j/2) floor為向下取整

起始節點為0的父子關系: 父節點k, 子節點為2K+1, 2k+2 子節點j, 父節點為 floor((j-1)/2)

參數$k為調整點位置, $lenth為數組長度,也就是從1起始到最後一個節點的坐標.

<?phpfunction fixDown(&$arr, $k, $lenth){while(2*$k<=$lenth) { //只要當前節點有子節點, 就需要繼續該循環 $j = $k*2; if ($j<$lenth && $arr[$j]<$arr[$j+1]) $j++; // 只要子節點有右節點,且右節點比左節點大,那麼切換到右節點操作。 if ($arr[$j] < $arr[$k]) break; // 如果子節點都沒有父節點大, 那麼調整結束。 exch($arr[$j], $arr[$k]); $k = $j; }}function exch(&$a, &$b) { $tmp = $a; $a = $b; $b = $tmp;}function headSort(&$arr){ $len = count($arr); array_unshift($arr, NULL); for($i=$len/2;$i>=1;$i--) { fixDown($arr, $i, $len); } while($len>1) { exch($arr[1], $arr[$len]); fixDown($arr, 1, --$len); } array_shift($arr);}$arr = array(4,6,4,9,2,3);headSort($arr);?>

希望本文所述排序演算法實例對大家的php程序設計有所幫助。

;

Ⅳ php怎麼在網頁上點擊表頭進行升序或降序排序的方法

這個需要使用ajax
為了表頭添加點擊事件。
然後通過ajax獲取當前排序的方式。
然後將獲取的數據處理、添加到表中

Ⅵ php 表格排序

<?php
$a=25;
$str="<table><tr>";
for($i=1;$i<=$a;$i++){
if($i%5==1){
$str.="</tr><tr>";
}
$str.="<td>".$i."</td>";
}
$str.="</tr></table>";
echo $str;
?>
第2種:
<?php
$a=5;
$str="<table>";
for($i=1;$i<=$a;$i++){
$str.="<tr><td>".$i."</td><td>".($i+($a*1))."</td><td>".($i+($a*2))."</td><td>".($i+($a*3))."</td><td>".($i+($a*4))."</td><td></tr>";
}
$str.="</table>";
echo $str;
?>

Ⅶ 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表格的排序相關的資料

熱點內容
四川廣電怎麼安裝app 瀏覽:4
大話西遊伺服器是什麼意思 瀏覽:775
誇克解壓壓縮文件 瀏覽:915
怎麼買賣副圖源碼 瀏覽:660
廣東農信app怎麼更改預留手機號碼 瀏覽:777
嵌套頁面php 瀏覽:566
安卓手機怎麼調到微信聊天模式 瀏覽:857
java博客開源系統 瀏覽:719
男人之間的加密對話日語 瀏覽:359
怎麼連遠程連接伺服器 瀏覽:11
安卓二手手機該如何檢測 瀏覽:213
微信可以共享圖片文件夾嗎 瀏覽:80
聯通wifi加密碼 瀏覽:643
錄屏文件夾小米 瀏覽:548
車上的app怎麼重設 瀏覽:24
指定文件夾屬性 瀏覽:131
linuxphp編程 瀏覽:337
以下不正確的是雲伺服器 瀏覽:909
琉璃神社壓縮密碼 瀏覽:715
大一學生解壓視頻 瀏覽:376