程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 一些php數組排序函數示例總結

一些php數組排序函數示例總結

編輯:關於PHP編程

在php中數組排序有很多函數可以實現的,如果是簡單的一維數組排序我們可以使用php 自帶的排序函數了,但多維數組時我們需要自己寫了。


回來後一直在揪心啊,於是翻了一下書本查閱,給我知道了答案。為了記住它們,我決定來一個數組排序函數大總結。


首先接觸的就是PHP數組排序、降序的排序問題。

sort:本函數為 array 中的單元賦予新的鍵名。這將刪除原有的鍵名而不僅是重新排序。
rsort:本函數對數組進行逆向排序(最高到最低)。 刪除原有的鍵名而不僅是重新排序。
asort:對數組進行排序並保持索引關系
arsort:對數組進行逆向排序並保持索引關系

ksort:對數組按照鍵名排序,保留鍵名到數據的關聯
krsort:對數組按照鍵名逆向排序,保留鍵名到數據的關聯

natsort:對字母數字字符串進行排序並保持原有鍵/值的關聯
natcasesort:同natsort排序算法,但不區分大小寫字母排序


PHP 數組排序(sort)
數字索引數組排序:
函數:sort(array, [sort type])
說明:sort()函數按升序對指定數組(第一個參數)進行排序。
sort函數第二參數作用為指定排序類型,是可選參數,可能的值為:
SORT_REGULAR: 默認值,不改變類型進行排序;
SORT_NUMERIC: 把值作為數字進行排序;
SORT_STRING: 把值作為字符串進行排序;
如數組中有4和”37″,按數字排序,4小於”37″;按字符串排序,4大於”37″;


一、一維數組

假設有一個一維數組,如下:


 $sortArr = array("name"=>"hiro", "age"=>"23", "city"=>"Shanghai", "code"=>"200051");
print_r()輸出的原始數組結果為:


 Array ( [name] => hiro [age] => 23 [city] => Shanghai [code] => 200051 )

1.sort()函數:根據數組下標進行升序排列;
print_r()輸出的數組結果為(輸出時只有數組下標,而不是鍵名):

1
 Array ( [0] => 23 [1] => 200051 [2] => Shanghai [3] => hiro )

2.rsort()函數:與sort()函數相反,根據數組下標進行降序排列;
print_r()輸出的數組結果為(輸出時只有數組下標,而不是鍵名):


 Array ( [0] => hiro [1] => Shanghai [2] => 200051 [3] => 23 )

3.asort()函數:根據數組的鍵名進行升序排列;
print_r()輸出的數組結果為:

1
 Array ( [age] => 23 [code] => 200051 [city] => Shanghai [name] => hiro )

4.arsort()函數:與asort()函數相反,根據數組的鍵名進行降序排列;
print_r()輸出的數組結果為:


 Array ( [name] => hiro [city] => Shanghai [code] => 200051 [age] => 23 )

5.ksort()函數:根據數組的鍵值進行升序排列;
print_r()輸出的數組結果為:


 Array ( [age] => 23 [city] => Shanghai [code] => 200051 [name] => hiro )

6.krsort()函數:與ksort()函數相反,根據數組的鍵值進行降序排列;
print_r()輸出的數組結果為:

 代碼如下 復制代碼


 Array ( [name] => hiro [city] => Shanghai [code] => 200051 [age] => 23 )

7.reverse_array()函數:反向當前的數組排列順序;
print_r()輸出的數組結果為:

 

 代碼如下 復制代碼  Array ( [name] => hiro [age] => 23 [city] => Shanghai [code] => 200051 )

8.shuffle()函數:隨機地排列數組順序(每次刷新後排列的順序都不相同);
print_r()輸出的數組結果為(只是其中一種隨機排列):


 Array ( [0] => 23 [1] => 200051 [2] => Shanghai [3] => hiro )

二、二維數組
假設有一個二維數組,如下:

 代碼如下 復制代碼

 $person = array(
 array("hiro", "23", "suzhou"),
 array("yoyo", "25", "shanghai"),
 array("janstar", "28", "xinjiang")
);
print_r()輸出的原始數組結果為:

1
 Array ( [0] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [1] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) [2] => Array ( [0] => janstar [1] => 28 [2] => xinjiang ) )

二維數組的排序是根據每維的鍵名排序的,所以需要額外地編寫比較函數。先舉三個例子:

1.按每維的第一個元素升序排列,代碼如下:

 代碼如下 復制代碼

function compare0($x, $y) {
 if($x[0] == $t[0]) {
  return 0;
 } elseif ($x[0] < $y[0]) {
  return -1;
 } else {
  return 1;
 }
}
 
usort($person, compare0);
echo "按第一個元素正向排序:";
print_r($person);
輸出的結果如下:

1
 按第一個元素正向排序:Array ( [0] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [1] => Array ( [0] => janstar [1] => 28 [2] => xinjiang ) [2] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) )

2.按每維的第三個元素升序排列,代碼如下:

 代碼如下 復制代碼

function compare2($x, $y) {
 if($x[2] == $t[2]) {
  return 0;
 } elseif ($x[2] < $y[2]) {
  return -1;
 } else {
  return 1;
 }
}
 
usort($person, compare2);
echo "按第三個元素正向排序:";
print_r($person);
輸出的結果如下:


 按第三個元素正向排序:Array ( [0] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) [1] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [2] => Array ( [0] => janstar [1] => 28 [2] => xinjiang ) )

3.按每維的第三個元素升序排列,代碼如下:

 代碼如下 復制代碼 function reverse_compare2($x, $y) {
 if($x[2] == $t[2]) {
  return 0;
 } elseif ($x[2] < $y[2]) {
  return 1; //改變後即可反向
 } else {
  return -1; //改變後即可反向
 }
}
 
usort($person, reverse_compare2);

echo "按第三個元素反向排序:";
print_r($person);
輸出的結果如下:

1
 按第三個元素反向排序:

 代碼如下 復制代碼 Array ( [0] => Array ( [0] => janstar [1] => 28 [2] => xinjiang ) [1] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [2] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) )

呵呵,是不是代碼多了點,記下了以後方便查閱啊!

 代碼如下 復制代碼

<?php
error_reporting(0);

/**
* @數字數組排序 可按從大到小或從小到大排序 
*/
function sortArray($array, $choice) {
    $values = array_values($array); // 建立一個數字索引的數組
    $ch = $choice==0 ? min:max; // 參數$choice為0按從小到大排列,否則其他都默認為按從大到小
    do {
        $val = $ch($values); // 找出最大或最小值
        $key = array_search($val,$values); // 取得最大值的鍵名
        $result[$key] = $val; // 將最大值存入新數組
        unset($values[$key]);
    } while (count($values) > 0);
    return $result;
}

$array = array(100, 1000, 1, 10000);
//$array = sortArray($array, 0);
$array = sortArray($array, 1);
foreach($array as $a) {
    echo "$a ";
}
?>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved