PHP實(shí)現(xiàn)多維數(shù)組多字段自定義排序
一、多維數(shù)組根據(jù)某一字段排序
此處用到了PHP的array_multisort方法(對(duì)多個(gè)數(shù)組或多維數(shù)組進(jìn)行排序),關(guān)于此方法的用法可以查看PHP開(kāi)發(fā)手冊(cè)。
首先我們假設(shè)一個(gè)數(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) );
實(shí)現(xiàn)思路:
通過(guò)將待排序數(shù)組的各個(gè)數(shù)組的$field保存在一維數(shù)組fieldArr中,在傳入array_multisort中參與排序。傳入 array_multisort后,相當(dāng)于對(duì)$field一維數(shù)組的排序,而后根據(jù)排序后的key重新構(gòu)建傳入的待排序數(shù)組。
實(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);
打印結(jié)果:
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ù)組多個(gè)字段自定義排序
這個(gè)方法用到了PHP的func_get_args函數(shù),關(guān)于此函數(shù)用法不會(huì)的也可以查看PHP開(kāi)發(fā)手冊(cè)。
同樣的首先假設(shè)一個(gè)數(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) );
實(shí)現(xiàn)思路:
實(shí)現(xiàn)思路和上面的差不多,只是多了采用PHP中的func_get_args函數(shù),來(lái)動(dòng)態(tài)獲取傳入的值,既可以解決多字段個(gè)數(shù)不確定的問(wèn)題。
實(shí)現(xiàn)方法:
/** * 多維數(shù)組多個(gè)字段自定義排序 * 參數(shù)傳遞不確定 */ function array_sort_by_many_field() { //獲取函數(shù)傳遞的參數(shù),第一個(gè)參數(shù)必須是一個(gè)數(shù)組 $args = func_get_args(); if (empty($args)) { return null; } $arr = array_shift($args); if (!is_array($arr)) { throw new Exception("第一個(gè)參數(shù)必須要是一個(gè)數(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);
打印結(jié)果:
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
)
)
到此這篇關(guān)于PHP實(shí)現(xiàn)多維數(shù)組多字段自定義排序的文章就介紹到這了,更多相關(guān)PHP多維數(shù)組自定義排序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
php使用preg_match()函數(shù)驗(yàn)證ip地址的方法
這篇文章主要介紹了php使用preg_match()函數(shù)驗(yàn)證ip地址的方法,涉及php針對(duì)數(shù)字及字符串的正則匹配操作相關(guān)技巧,需要的朋友可以參考下2017-01-01PHP PDO函數(shù)庫(kù)(PDO Functions)
PDO是一個(gè)“數(shù)據(jù)庫(kù)訪問(wèn)抽象層”,作用是統(tǒng)一各種數(shù)據(jù)庫(kù)的訪問(wèn)接口,與mysql和mysqli的函數(shù)庫(kù)相比,PDO讓跨數(shù)據(jù)庫(kù)的使用更具有親和力.2009-07-07php實(shí)現(xiàn)根據(jù)url自動(dòng)生成縮略圖的方法
這篇文章主要介紹了php實(shí)現(xiàn)根據(jù)url自動(dòng)生成縮略圖的方法,詳細(xì)講述了相關(guān)庫(kù)的使用、配置文件寫(xiě)法及類文件的用法示例,需要的朋友可以參考下2014-09-09PHP curl 或 file_get_contents 獲取需要授權(quán)頁(yè)面的方法
本篇文章主要介紹了PHP curl 或 file_get_contents獲取需要授權(quán)頁(yè)面的方法,具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-05-05