PHP中二維數組的排序方法

來源:互聯網
上載者:User
<?php
/**
* @package BugFree
* @version $Id: FunctionsMain.inc.php,v 1.32 2005/09/24 11:38:37 wwccss Exp $
*
*
* Sort an two-dimension array by some level two items use array_multisort() function.
*
* sysSortArray($Array,"Key1","SORT_ASC","SORT_RETULAR","Key2"……)
* @author Chunsheng Wang <wwccss@263.net>
* @param array $ArrayData the array to sort.
* @param string $KeyName1 the first item to sort by.
* @param string $SortOrder1 the order to sort by("SORT_ASC"|"SORT_DESC")
* @param string $SortType1 the sort type("SORT_REGULAR"|"SORT_NUMERIC"|"SORT_STRING")
* @return array sorted array.
*/
function sysSortArray($ArrayData,$KeyName1,$SortOrder1 = "SORT_ASC",$SortType1 = "SORT_REGULAR")
{
if(!is_array($ArrayData))
{
return $ArrayData;
}

// Get args number.
$ArgCount = func_num_args();

// Get keys to sort by and put them to SortRule array.
for($I = 1;$I < $ArgCount;$I ++)
{
$Arg = func_get_arg($I);
if(!eregi("SORT",$Arg))
{
$KeyNameList[] = $Arg;
$SortRule[] = '$'.$Arg;
}
else
{
$SortRule[] = $Arg;
}
}

// Get the values according to the keys and put them to array.
foreach($ArrayData AS $Key => $Info)
{
foreach($KeyNameList AS $KeyName)
{
${$KeyName}[$Key] = $Info[$KeyName];
}
}

// Create the eval string and eval it.
$EvalString = 'array_multisort('.join(",",$SortRule).',$ArrayData);';
eval ($EvalString);
return $ArrayData;
}


//################# 樣本 #################
$arr = array(
array(
'name' => '學習',
'size' => '1235',
'type' => 'jpe',
'time' => '1921-11-13',
'class' => 'dd',
),
array(
'name' => '中國功夫',
'size' => '153',
'type' => 'jpe',
'time' => '2005-11-13',
'class' => 'jj',
),
array(
'name' => '編程',
'size' => '35',
'type' => 'gif',
'time' => '1997-11-13',
'class' => 'dd',
),
array(
'name' => '中國功夫',
'size' => '65',
'type' => 'jpe',
'time' => '1925-02-13',
'class' => 'yy',
),
array(
'name' => '中國功夫',
'size' => '5',
'type' => 'icon',
'time' => '1967-12-13',
'class' => 'rr',
),
);

print_r($arr);

//注意:按照數字方式排序時 153 比 65 小
$temp = sysSortArray($arr,"name","SORT_ASC","type","SORT_DESC","size","SORT_ASC","SORT_STRING");

print_r($temp);

?>

其他相關排序函數:


sort ( array &$array [, int $sort_flags] )

該函數會對目標數組進行排序,各元素按值由低到高的順序排列.注意,該函數參數是按引用傳遞的, 它並不是返回排序後的數組.相反,它只是對當前數組排序,不論結果如何都不返回任何值.
注意: 本函數為 array 中的單元賦予新的鍵名.這將刪除原有的鍵名而不僅是重新排序.

$arr = array(9,5,2,6,8,4,3,1); sort($arr); print_r($arr); ?>

輸出:(可以看到索引值關聯不再保持)

Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 8 [7] => 9 )

asort ( array &$array [, int $sort_flags] )

本函數對數組進行排序,數組的索引保持和單元的關聯.主要用於對那些單元順序很重要的結合數組進行排序. 同樣是按引用傳遞的,沒傳回值.

<?php $arr = array(5,2,6,8,4,1); asort($arr); print_r($arr); ?>

輸出(可以看到索引值保持不變):

Array ( [5] => 1 [1] => 2 [4] => 4 [0] => 5 [2] => 6 [3] => 8 )

rsort ( array &$array [, int $sort_flags] )

本函數類似sort函數, 對數組進行逆向排序(最高到最低)。

注: 本函數為 array 中的單元賦予新的鍵名。這將刪除原有的鍵名而不僅是重新排序。

如果成功則返回 TRUE,失敗則返回 FALSE。

arsort ( array &$array [, int $sort_flags] )

本函數對數組進行逆向排序,數組的索引保持和單元的關聯。主要用於對那些單元順序很重要的結合數組進行排序。arsort()函數與asort()相同,只是它以相反的順序(降序)對數組元素排序。

如果成功則返回 TRUE,失敗則返回 FALSE。

ksort ( array &$array [, int $sort_flags] )

ksort和sort的區別就是對數組按照鍵名排序而不是按值排序,保留鍵名到資料的關聯.本函數主要用於關聯陣列. 如果成功則返回 TRUE,失敗則返回 FALSE。

krsort ( array &$array [, int $sort_flags] )
見ksort,該函數同ksort只是把ksort後的結果逆序排序而已。

natsort ( array &$array )

本函數實現了一個和人們通常對字母數字字串進行排序的方法一樣的排序演算法並保持原有鍵/值的關聯,這被稱為“自然排序”.本演算法和通常的電腦字串排序演算法(用於 sort())的區別見下面樣本.

如果成功則返回 TRUE,失敗則返回 FALSE.
php手冊中有個非常經典的例子

<?php $array1 = $array2 = array("img12.png", "img10.png", "img2.png", "img1.png"); sort($array1); echo "Standard sorting\n"; print_r($array1); natsort($array2); echo "\nNatural order sorting\n"; print_r($array2); ?>

上例將輸出:Standard sorting

Array ( [0] => img1.png [1] => img10.png [2] => img12.png [3] => img2.png )

Natural order sorting

Array ( [3] => img1.png [2] => img2.png [1] => img10.png [0] => img12.png )

還有些數組排序函數以u(user)開頭的, 都是些使用者自訂排序函數。時間原因這就不多寫了。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.