PHP二維數(shù)組排序的3種方法和自定義函數(shù)分享
關(guān)于排序一般我們都是通過(guò)數(shù)據(jù)庫(kù)或者nosql(eg:redis)先排好序然后輸出到程序里直接使用,但是有些時(shí)候我們需要通過(guò)PHP直接來(lái)對(duì)數(shù)組進(jìn)行排序,而在PHP里存儲(chǔ)數(shù)據(jù)用到最多的就是對(duì)象和數(shù)組,但處理較多的就是數(shù)組,因?yàn)橛蟹浅XS富的內(nèi)置函數(shù)庫(kù)(其實(shí)對(duì)象一定程度上也可以理解為是數(shù)組),這些函數(shù)庫(kù)很大程度上可以幫助我們實(shí)現(xiàn)某些功能。常用的系統(tǒng)函數(shù)有sort、asort、arsort、ksort、krsort等等,這里我主要說(shuō)下對(duì)二維數(shù)組的排序,兩種方法:
一、用PHP自帶array_multisort函數(shù)排序
<?php
$data = array();
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);
// 取得列的列表
foreach ($data as $key => $row)
{
$volume[$key] = $row['volume'];
$edition[$key] = $row['edition'];
}
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
print_r($data);
?>
輸出結(jié)果:
(
[0] => Array
(
[volume] => 98
[edition] => 2
)
[1] => Array
(
[volume] => 86
[edition] => 1
)
[2] => Array
(
[volume] => 86
[edition] => 6
)
[3] => Array
(
[volume] => 85
[edition] => 6
)
[4] => Array
(
[volume] => 67
[edition] => 2
)
[5] => Array
(
[volume] => 67
[edition] => 7
)
)
關(guān)于array_multisort官方文檔也有比較詳細(xì)的說(shuō)明:http://www.php.net/manual/zh/function.array-multisort.php
二、自定義函數(shù)排序1
<?php
$data = array();
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);
// 取得列的列表
foreach ($data as $key => $row)
{
$volume[$key] = $row['volume'];
$edition[$key] = $row['edition'];
}
$ret = arraySort($data, 'volume', 'desc');
print_r($ret);
/**
* @desc arraySort php二維數(shù)組排序 按照指定的key 對(duì)數(shù)組進(jìn)行排序
* @param array $arr 將要排序的數(shù)組
* @param string $keys 指定排序的key
* @param string $type 排序類型 asc | desc
* @return array
*/
function arraySort($arr, $keys, $type = 'asc') {
$keysvalue = $new_array = array();
foreach ($arr as $k => $v){
$keysvalue[$k] = $v[$keys];
}
$type == 'asc' ? asort($keysvalue) : arsort($keysvalue);
reset($keysvalue);
foreach ($keysvalue as $k => $v) {
$new_array[$k] = $arr[$k];
}
return $new_array;
}
?>
輸出結(jié)果:
(
[3] => Array
(
[volume] => 98
[edition] => 2
)
[4] => Array
(
[volume] => 86
[edition] => 6
)
[1] => Array
(
[volume] => 86
[edition] => 1
)
[2] => Array
(
[volume] => 85
[edition] => 6
)
[5] => Array
(
[volume] => 67
[edition] => 7
)
[0] => Array
(
[volume] => 67
[edition] => 2
)
)
這個(gè)自定義函數(shù)與系統(tǒng)函數(shù)的一個(gè)區(qū)別就是:自定義函數(shù)只支持針對(duì)某一個(gè)key的排序,如果要支持多個(gè)key的排序需要執(zhí)行多次; 而系統(tǒng)函數(shù)array_multisort可以一次性對(duì)多個(gè)key且可以指定多個(gè)排序規(guī)則,系統(tǒng)函數(shù)還是相當(dāng)強(qiáng)大的,推薦使用系統(tǒng)函數(shù),畢竟是C底層實(shí)現(xiàn)的,這里只是舉例說(shuō)明如果通過(guò)自定義函數(shù)來(lái)對(duì)數(shù)組進(jìn)行排序,當(dāng)然這個(gè)自定義函數(shù)也可以繼續(xù)擴(kuò)展來(lái)支持更多的排序規(guī)則。在取排名、排行榜、成績(jī)等場(chǎng)景中用到的還是非常多的。
三、自定義函數(shù)排序2
以下函數(shù)是對(duì)一個(gè)給定的二維數(shù)組按照指定的鍵值進(jìn)行排序,先看函數(shù)定義:
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;
}
它可以對(duì)二維數(shù)組按照指定的鍵值進(jìn)行排序,也可以指定升序或降序排序法(默認(rèn)為升序),用法示例:
$array = array(
array('name'=>'手機(jī)','brand'=>'諾基亞','price'=>1050),
array('name'=>'筆記本電腦','brand'=>'lenovo','price'=>4300),
array('name'=>'剃須刀','brand'=>'飛利浦','price'=>3100),
array('name'=>'跑步機(jī)','brand'=>'三和松石','price'=>4900),
array('name'=>'手表','brand'=>'卡西歐','price'=>960),
array('name'=>'液晶電視','brand'=>'索尼','price'=>6299),
array('name'=>'激光打印機(jī)','brand'=>'惠普','price'=>1200)
);
$ShoppingList = array_sort($array,'price');
print_r($ShoppingList);
上面是對(duì)$array這個(gè)二維數(shù)組按照'price'從低到高的排序。
- PHP 多維數(shù)組的排序問(wèn)題 根據(jù)二維數(shù)組中某個(gè)項(xiàng)排序
- php中二維數(shù)組排序問(wèn)題方法詳解
- php二維數(shù)組排序方法(array_multisort usort)
- php對(duì)二維數(shù)組按指定鍵值key排序示例代碼
- PHP排序之二維數(shù)組的按照字母排序?qū)崿F(xiàn)代碼
- PHP按指定鍵值對(duì)二維數(shù)組進(jìn)行排序的方法
- PHP實(shí)現(xiàn)二維數(shù)組按某列進(jìn)行排序的方法
- php冒泡排序、快速排序、快速查找、二維數(shù)組去重實(shí)例分享
- php對(duì)二維數(shù)組進(jìn)行相關(guān)操作(排序、轉(zhuǎn)換、去空白等)
- PHP實(shí)現(xiàn)二維數(shù)組根據(jù)key進(jìn)行排序的方法
- php自定義排序uasort函數(shù)示例【二維數(shù)組按指定鍵值排序】
相關(guān)文章
thinkphp模板賦值與替換實(shí)例簡(jiǎn)述
這篇文章主要介紹了thinkphp模板賦值與替換的方法,以實(shí)例形式簡(jiǎn)述了模板復(fù)制的兩種簡(jiǎn)單方法,以及模板替換中的特殊字符串說(shuō)明與用法實(shí)例,是使用頻率比較高的技巧,需要的朋友可以參考下2014-11-11TP3.2框架分頁(yè)相關(guān)實(shí)現(xiàn)方法分析
這篇文章主要介紹了TP3.2框架分頁(yè)相關(guān)實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了TP3.2框架分頁(yè)相關(guān)步驟、功能實(shí)現(xiàn)方法與操作技巧,需要的朋友可以參考下2020-06-06ThinkPHP 在阿里云上的nginx.config配置實(shí)例詳解
這篇文章主要介紹了ThinkPHP 在阿里云上的nginx.config配置實(shí)例詳解,需要的朋友可以參考下2017-10-10Laravel 5.4中migrate報(bào)錯(cuò): Specified key was too long error的解決
今天在執(zhí)行l(wèi)aravel migrate時(shí)出現(xiàn)異常,找了好半天才找到問(wèn)題所在,所以這篇文章主要給大家介紹了關(guān)于Laravel 5.4中migrate報(bào)錯(cuò): Specified key was too long error的解決方法,需要的朋友可以參考下。2017-11-11php設(shè)計(jì)模式之策略模式實(shí)例分析【星際爭(zhēng)霸游戲案例】
這篇文章主要介紹了php設(shè)計(jì)模式之策略模式,結(jié)合星際爭(zhēng)霸游戲案例形式分析了php策略模式相關(guān)原理、用法及操作注意事項(xiàng),需要的朋友可以參考下2020-03-03PHP實(shí)現(xiàn)163郵箱自動(dòng)發(fā)送郵件
163郵箱實(shí)用性非常高。那么基于php如何實(shí)現(xiàn)163郵箱自動(dòng)發(fā)送郵件功能呢,下面腳本之家小編給大家分享具體實(shí)現(xiàn)代碼2016-03-03php制作unicode解碼工具(unicode編碼轉(zhuǎn)換器)代碼分享
php制作Unicode編碼解碼在線轉(zhuǎn)換工具代碼分享2013-12-12