熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PHP編程 >> 正文

PHP數組排序函數合集 以及它們之間的聯系分析

2013-11-15 12:32:41  來源: PHP編程 

  下邊提到的幾個數組函數的排序有一些共性
數組被作為排序函數的參數排序以後數組本身就發生了改變函數的返回值為bool類型
函數名中出現單a表示association含義為在按值排序的過程中保持key=>value的對應關系不變
函數名中出現單k表示key含義為在按值排序的過程中按照數組key而不是數組的值排序
函數名中出現單r的表示reverse含義為按照跟不加r的相反的順序排列
函數名中出現單u的表示userdefined含義為使用用戶自定義函數排序如果函數的邏輯是參數<參數返回負數則按照升序排列(p返負升)
sort函數升序排序

復制代碼 代碼如下:
bool sort ( array &$array [ int $sort_flags= SORT_REGULAR ] )
<?php
$fruits = array("lemon" "orange" "banana" "apple");
sort($fruits);
var_dump($fruits);
?>
結果
array
=>
string
apple (length=)
=>
string
banana (length=)
=>
string
lemon (length=)
=>
string
orange (length=)

  
rsort降序排列

復制代碼 代碼如下:
<?php
$fruits = array("lemon" "orange" "banana" "apple");
rsort($fruits);
var_dump($fruits);
?>
結果
array
=>
string
orange (length=)
=>
string
lemon (length=)
=>
string
banana (length=)
=>
string
apple (length=)

  
asort按照二維數組值的升序排列(保持key=>value的關聯關系)

復制代碼 代碼如下:
<?php
$fruits = array("d" => "lemon" "a" => "orange" "b" => "banana" "c" => "apple");
asort($fruits);
var_dump($fruits);
?>
結果
array
c =>
string
apple (length=)
b =>
string
banana (length=)
d =>
string
lemon (length=)
a =>
string
orange (length=)

  
arsort按照二維數組值的降序排列(保持key=>value的關聯關系)

復制代碼 代碼如下:
<?php
$fruits = array("d" => "lemon" "a" => "orange" "b" => "banana" "c" => "apple");
arsort($fruits);
var_dump($fruits);
?>
結果
array
a =>
string
orange (length=)
d =>
string
lemon (length=)
b =>
string
banana (length=)
c =>
string
apple (length=)

  
ksort按照數組的key升序排列

復制代碼 代碼如下:
<?php
$fruits = array("d"=>"lemon" "a"=>"orange" "b"=>"banana" "c"=>"apple");
ksort($fruits);
var_dump($fruits);
?>
結果
array
a =>
string
orange (length=)
b =>
string
banana (length=)
c =>
string
apple (length=)
d =>
string
lemon (length=)

  
krsort按照數組key的降序排列

復制代碼 代碼如下:
<?php
$fruits = array("d"=>"lemon" "a"=>"orange" "b"=>"banana" "c"=>"apple");
krsort($fruits);
var_dump($fruits);
?>
array
d =>
string
lemon (length=)
c =>
string
apple (length=)
b =>
string
banana (length=)
a =>
string
orange (length=)

  
usort函數按照用戶自定義的函數排序

復制代碼 代碼如下:
<?php
function cmp($a $b)
{
if ($a == $b) {
return ;
}
return ($a < $b) ? : ;
}
$a = array( );
usort($a "cmp");
var_dump($a);
?>

  
結果
array
=>
int

=>
int

=>
int

=>
int

=>
int

uksort使用自定義函數按照數組的key排序

復制代碼 代碼如下:
<?php
function cmp($a $b)
{
$a = preg_replace(@^(a|an|the) @ $a);
$b = preg_replace(@^(a|an|the) @ $b);
return strcasecmp($a $b);
}
$a = array("John" => "the Earth" => "an apple" => "a banana" => );
uksort($a "cmp");
var_dump($a);
?>

  
結果
array
an apple =>
int

a banana =>
int

the Earth =>
int

John =>
int

uasort將數組用自定義函數按照value排序保持索引關系不變

復制代碼 代碼如下:
<?php
// Comparison function
function cmp($a $b) {
if ($a == $b) {
return ;
}
return ($a < $b) ? : ;
}
// Array to be sorted
$array = array(a => b => c => d => e => f => g => h => );
var_dump($array);
// Sort and print the resulting array
uasort($array cmp);
var_dump($array);
?>

  
結果
array
a =>
int

b =>
int

c =>
int

d =>
int

e =>
int

f =>
int

g =>
int

h =>
int

array
d =>
int

h =>
int

c =>
int

e =>
int

g =>
int

a =>
int

f =>
int

b =>
int

array_multisort排序多個數組或多維數組

復制代碼 代碼如下:
<?php
$ar = array(
array("" "a")
array( "" )
);

array_multisort($ar[] SORT_ASC SORT_STRING
$ar[] SORT_NUMERIC SORT_DESC);
var_dump($ar);
?>

  
結果
array
=>
array
=>
string
(length=)
=>
int

=>
int

=>
int

=>
string
a (length=)
=>
array
=>
int

=>
int

=>
string
(length=)
=>
int

=>
int

//說明
上例中$ar數組優先按照$ar[]的字符串值升序排列如果字符串值相等再按照$ar[]數組的數字值降序排列
array_multisort函數的任意一個位置的參數如果是數組表示排序時用的值
如果有多個數組參數優先按照前邊的數組值進行排序如果是常量例如
SORT_ASC SORT_DESC SORT_REGULARSORT_NUMERIC SORT_STRING
表示排序方法(數組取值前優先)
==========================================================================================
PHP二維數組排序函數
PHP一維數組的排序可以用sort()asort()arsort()等函數但是PHP二維數組的排序需要自定義
以下函數是對一個給定的二維數組按照指定的鍵值進行排序先看函數定義

復制代碼 代碼如下:
function array_sort($arr$keys$type=asc){
$keysvalue = $new_array = array();
foreach ($arr as $k=>$v){
$keysvalue[$k] = $v[$keys];
}
if($type == asc){
asort($keysvalue);
}else{
arsort($keysvalue);
}
reset($keysvalue);
foreach ($keysvalue as $k=>$v){
$new_array[$k] = $arr[$k];
}
return $new_array;
}

  
它可以對二維數組按照指定的鍵值進行排序也可以指定升序或降序排序法(默認為升序)用法示例

復制代碼 代碼如下:
$array = array(
array(name=>手機brand=>諾基亞price=>)
array(name=>筆記本電腦brand=>lenovoprice=>)
array(name=>剃須刀brand=>飛利浦price=>)
array(name=>跑步機brand=>三和松石price=>)
array(name=>手表brand=>卡西歐price=>)
array(name=>液晶電視brand=>索尼price=>)
array(name=>激光打印機brand=>惠普price=>)
);
$ShoppingList = array_sort($arrayprice);
print_r($ShoppingList);

  
上面是對$array這個二維數組按照price從低到高的排序
輸出結果(略)


From:http://tw.wingwit.com/Article/program/PHP/201311/21145.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.