PHP實現(xiàn)多維數(shù)組多字段自定義排序
一、多維數(shù)組根據(jù)某一字段排序
此處用到了PHP的array_multisort方法(對多個數(shù)組或多維數(shù)組進行排序),關于此方法的用法可以查看PHP開發(fā)手冊。
首先我們假設一個數(shù)組:
$demo_array = array(
array('id' => 8, 'name' => 'Bob', 'age' => 18, 'score' => 92),
array('id' => 9, 'name' => 'Sun', 'age' => 16, 'score' => 99),
array('id' => 3, 'name' => 'Snow', 'age' => 16, 'score' => 82),
array('id' => 11, 'name' => 'Frank', 'age' => 22, 'score' => 90)
);實現(xiàn)思路:
通過將待排序數(shù)組的各個數(shù)組的$field保存在一維數(shù)組fieldArr中,在傳入array_multisort中參與排序。傳入 array_multisort后,相當于對$field一維數(shù)組的排序,而后根據(jù)排序后的key重新構建傳入的待排序數(shù)組。
實現(xiàn)方法:
/**
* 數(shù)組按照某一字段排序
* @param $array 需要排序的二維數(shù)組
* @param $field 所根據(jù)排序的字段
* @param bool $desc 排序類型
*/
function array_sort_by_one_field(&$array, $field, $desc = false)
{
$fieldArr = array();
foreach ($array as $k => $v) {
$fieldArr[$k] = $v[$field];
}
$sort = $desc == false ? SORT_ASC : SORT_DESC;
array_multisort($fieldArr, $sort, $array);
}
array_sort_by_one_field($demo_array, 'age', true);
print_r($demo_array);打印結果:
Array
(
[0] => Array
(
[id] => 11
[name] => Frank
[age] => 22
[score] => 90
)
[1] => Array
(
[id] => 8
[name] => Bob
[age] => 18
[score] => 92
)
[2] => Array
(
[id] => 3
[name] => Snow
[age] => 16
[score] => 82
)
[3] => Array
(
[id] => 9
[name] => Sun
[age] => 16
[score] => 99
)
)
二、多維數(shù)組多個字段自定義排序
這個方法用到了PHP的func_get_args函數(shù),關于此函數(shù)用法不會的也可以查看PHP開發(fā)手冊。
同樣的首先假設一個數(shù)組:
$demo_array = array(
array('id' => 8, 'name' => 'Bob', 'age' => 18, 'score' => 92),
array('id' => 9, 'name' => 'Sun', 'age' => 16, 'score' => 99),
array('id' => 3, 'name' => 'Snow', 'age' => 16, 'score' => 82),
array('id' => 11, 'name' => 'Frank', 'age' => 22, 'score' => 90)
);實現(xiàn)思路:
實現(xiàn)思路和上面的差不多,只是多了采用PHP中的func_get_args函數(shù),來動態(tài)獲取傳入的值,既可以解決多字段個數(shù)不確定的問題。
實現(xiàn)方法:
/**
* 多維數(shù)組多個字段自定義排序
* 參數(shù)傳遞不確定
*/
function array_sort_by_many_field()
{
//獲取函數(shù)傳遞的參數(shù),第一個參數(shù)必須是一個數(shù)組
$args = func_get_args();
if (empty($args)) {
return null;
}
$arr = array_shift($args);
if (!is_array($arr)) {
throw new Exception("第一個參數(shù)必須要是一個數(shù)組");
}
foreach ($args as $key => $field) {
if (is_string($field)) {
$temp = array();
foreach ($arr as $index => $val) {
$temp[$index] = $val[$field];
}
$args[$key] = $temp;
}
}
$args[] = &$arr;//引用值
call_user_func_array('array_multisort', $args);
return array_pop($args);
}
$arr = array_sort_by_many_field($demo_array, 'score', SORT_DESC, 'age', SORT_ASC);
print_r($arr);打印結果:
Array
(
[0] => Array
(
[id] => 9
[name] => Sun
[age] => 16
[score] => 99
)
[1] => Array
(
[id] => 8
[name] => Bob
[age] => 18
[score] => 92
)
[2] => Array
(
[id] => 11
[name] => Frank
[age] => 22
[score] => 90
)
[3] => Array
(
[id] => 3
[name] => Snow
[age] => 16
[score] => 82
)
)
到此這篇關于PHP實現(xiàn)多維數(shù)組多字段自定義排序的文章就介紹到這了,更多相關PHP多維數(shù)組自定義排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
解析PHP 使用curl提交json格式數(shù)據(jù)
本篇文章是對PHP中使用curl提交json格式數(shù)據(jù)的實現(xiàn)方法進行了詳細的分析介紹,需要的朋友參考下2013-06-06
解決Mac OS X 自帶PHP環(huán)境gd庫擴展缺少freetype的問題
下面小編就為大家分享一篇解決Mac OS X 自帶PHP環(huán)境gd庫擴展缺少freetype的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03
從php核心代碼分析require和include的區(qū)別
見到鳥哥的一文 深入理解PHP之require/include順序 忍不住繼續(xù)再深入了一下下,在此記錄一下深入的過程,以供以后查閱。2011-01-01
php實現(xiàn)給二維數(shù)組中所有一維數(shù)組添加值的方法
這篇文章主要介紹了php實現(xiàn)給二維數(shù)組中所有一維數(shù)組添加值的方法,涉及php針對數(shù)組的遍歷、轉換、賦值等相關操作技巧,需要的朋友可以參考下2017-02-02
PHP pthreads v3下的Volatile簡介與使用方法示例
這篇文章主要介紹了PHP pthreads v3下的Volatile簡介與使用方法,結合實例形式較為詳細的分析了PHP pthreads v3下Volatile的功能、原理、使用方法及相關操作注意事項,需要的朋友可以參考下2020-02-02

