從兩個不同的表中獲取各自的4條數(shù)據(jù),然后整合(array_merge)成一個數(shù)組,再根據(jù)數(shù)據(jù)的創(chuàng)建時間降序排序取前4條。
創(chuàng)新互聯(lián)從2013年成立,是專業(yè)互聯(lián)網(wǎng)技術服務公司,擁有項目成都做網(wǎng)站、網(wǎng)站建設網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元滑縣做網(wǎng)站,已為上家服務,為滑縣各地企業(yè)和個人服務,聯(lián)系電話:028-86922220
遇到這個要求的時候就不是 ORDER BY 能解決的問題了。因此翻看 PHP 手冊查找到了如下方法,做此筆記。
廢話少說,奉上代碼,清單如下:
[php] view plain copy
?php
/**
* 二維數(shù)組根據(jù)某個字段排序
* 功能:按照用戶的年齡倒序排序
* @author ruxing.li
*/
header('Content-Type:text/html;Charset=utf-8');
$arrUsers = array(
array(
'id' = 1,
'name' = '張三',
'age' = 25,
),
array(
'id' = 2,
'name' = '李四',
'age' = 23,
),
array(
'id' = 3,
'name' = '王五',
'age' = 40,
),
array(
'id' = 4,
'name' = '趙六',
'age' = 31,
),
array(
'id' = 5,
'name' = '黃七',
'age' = 20,
),
);
$sort = array(
'direction' = 'SORT_DESC', //排序順序標志 SORT_DESC 降序;SORT_ASC 升序
'field' = 'age', //排序字段
);
$arrSort = array();
foreach($arrUsers AS $uniqid = $row){
foreach($row AS $key=$value){
$arrSort[$key][$uniqid] = $value;
}
}
if($sort['direction']){
array_multisort($arrSort[$sort['field']], constant($sort['direction']), $arrUsers);
}
var_dump($arrUsers);
/*
輸出結(jié)果:
array (size=5)
0 =
array (size=3)
'id' = int 5
'name' = string '黃七' (length=6)
'age' = int 20
1 =
array (size=3)
'id' = int 2
'name' = string '李四' (length=6)
'age' = int 23
2 =
array (size=3)
'id' = int 1
'name' = string '張三' (length=6)
'age' = int 25
3 =
array (size=3)
'id' = int 4
'name' = string '趙六' (length=6)
'age' = int 31
4 =
array (size=3)
'id' = int 3
'name' = string '王五' (length=6)
'age' = int 40
*/
1 需要排序的數(shù)組如下:
$array = array(
array('name'='手機','brand'='諾基亞','price'=1050),
array('name'='筆記本電腦','brand'='lenovo','price'=4300),
array('name'='剃須刀','brand'='飛利浦','price'=3100),
array('name'='跑步機','brand'='三和松石','price'=4900),
array('name'='手表','brand'='卡西歐','price'=960),
array('name'='液晶電視','brand'='索尼','price'=6299),
array('name'='激光打印機','brand'='惠普','price'=1200)
);
2 排序的函數(shù):
function arr_sort($array,$key,$order="asc"){//asc是升序 desc是降序
$arr_nums=$arr=array();
foreach($array as $k=$v){
$arr_nums[$k]=$v[$key];
}
if($order=='asc'){
asort($arr_nums);
}else{
arsort($arr_nums);
}
foreach($arr_nums as $k=$v){
$arr[$k]=$array[$k];
}
return $arr;
}
3 調(diào)用方式:
arr_sort($array,'price');
您好,這樣:
?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 對數(shù)組進行排序
* @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;
}
?
這個自定義函數(shù)與系統(tǒng)函數(shù)的一個區(qū)別就是:自定義函數(shù)只支持針對某一個key的排序,如果要支持多個key的排序需要執(zhí)行多次; 而系統(tǒng)函數(shù)array_multisort可以一次性對多個key且可以指定多個排序規(guī)則,系統(tǒng)函數(shù)還是相當強大的,推薦使用系統(tǒng)函數(shù),畢竟是C底層實現(xiàn)的,這里只是舉例說明如果通過自定義函數(shù)來對數(shù)組進行排序,當然這個自定義函數(shù)也可以繼續(xù)擴展來支持更多的排序規(guī)則。在取排名、排行榜、成績等場景中用到的還是非常多的。
//提供一個方法
class?lib_BaseUtils{
static?$s_field;
static?$s_sc;
/**
?*?php?二維數(shù)組按鍵值排序
?*?@param?array?$a?需要排序的數(shù)組
?*?@param?string?$sort?排序的鍵值
?*?@param?string?$d?默認ASC,帶上參后為DESC
?*?@return?boolean
?*/
static?function?array_sort($a,?$sort,?$d='')?{
self::$s_field?=?$sort;
self::$s_sc?=?$d;
usort($a,?array("lib_BaseUtils","array_sort_callback"));
return?$a;
}
//排序回調(diào)方法?請勿刪除
static?function?array_sort_callback($a,?$b)?{
$s_a?=?self::$s_sc???$b?:?$a;
$s_b?=?self::$s_sc???$a?:?$b;
$field?=?self::$s_field;
switch?(true){
case?(is_string($s_a[$field])??is_string($s_b[$field])):
return?strcmp($s_a[$field],?$s_b[$field]);
break;
default:
if($s_a[$field]==?$s_b[$field]){
return?0;
}else{
return?$s_a[$field]$s_b[$field]?-1:1;
}?
}
}
}
調(diào)用方法
lib_BaseUtils::array_sort($lists, 'app_down','desc');
復雜的數(shù)組排序可以用自定義的排序規(guī)則
?php
$arr?=?array(
0?=?array('id'?=?'2014347856',?'name'?=?'張?zhí)?,?'科目'?=?'語文',?'tag'?=?'期中考試',?'成績'?=?'142'),
1?=?array('id'?=?'2014347856',?'name'?=?'張?zhí)?,?'科目'?=?'數(shù)學',?'tag'?=?'期中考試',?'成績'?=?'98'),
2?=?array('id'?=?'2014347856',?'name'?=?'張?zhí)?,?'科目'?=?'英語',?'tag'?=?'期中考試',?'成績'?=?'118'),
3?=?array('id'?=?'2014347856',?'name'?=?'張?zhí)?,?'科目'?=?'化學',?'tag'?=?'期中考試',?'成績'?=?'78'),
4?=?array('id'?=?'2014347856',?'name'?=?'張?zhí)?,?'科目'?=?'物理',?'tag'?=?'期中考試',?'成績'?=?'132'),
5?=?array('id'?=?'2014347856',?'name'?=?'張?zhí)?,?'科目'?=?'生物',?'tag'?=?'期中考試',?'成績'?=?'115'),
6?=?array('id'?=?'2014347856',?'name'?=?'張?zhí)?,?'科目'?=?'地理',?'tag'?=?'期中考試',?'成績'?=?'99'),
7?=?array('id'?=?'2014347856',?'name'?=?'張?zhí)?,?'科目'?=?'歷史',?'tag'?=?'期中考試',?'成績'?=?'88'),
8?=?array('id'?=?'2014347856',?'name'?=?'張?zhí)?,?'科目'?=?'政治',?'tag'?=?'期中考試',?'成績'?=?'125'),
9?=?array('id'?=?'2014347880',?'name'?=?'李鳴',?'科目'?=?'語文',?'tag'?=?'期中考試',?'成績'?=?'79'),
10?=?array('id'?=?'2014347880',?'name'?=?'李鳴',?'科目'?=?'數(shù)學',?'tag'?=?'期中考試',?'成績'?=?'148'),
11?=?array('id'?=?'2014347880',?'name'?=?'李鳴',?'科目'?=?'英語',?'tag'?=?'期中考試',?'成績'?=?'142'),
);
/*自定義排序*/
function?userSort($a,?$b)
{
if?($a['name']?==?$b['name'])?{
/*排序科目*/
$subjectSort?=?array('語文',?'數(shù)學',?'英語',?'歷史',?'政治',?'地理',?'物理',?'化學',?'生物');
foreach?($subjectSort?as?$index?=?$item)?{
if?($a['科目']?==?$item)?{
$tmp1?=?$index;
}
if?($b['科目']?==?$item)?{
$tmp2?=?$index;
}
}
return?$tmp1??$tmp2???-1?:?1;
}?else?{
/*排序name*/
$tmpArr?=?[$a['name'],?$b['name']];
sort($tmpArr);
return?$a['name']?==?$tmpArr[0]???-1?:?1;
}
}
usort($arr,?'userSort');
var_dump($arr);
//先用array_column 多維數(shù)組按照縱向(列)取出
$date = array_column($arr, '0');
//上面得到的結(jié)果:array()
//再用array_multisort 結(jié)合array_column得到的結(jié)果對$arr進行排序
array_multisort($date,SORT_ASC,$arr);
網(wǎng)站名稱:php二維數(shù)據(jù)排序,php二維數(shù)據(jù)排序方法
URL網(wǎng)址:http://jinyejixie.com/article24/dsedije.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供用戶體驗、虛擬主機、手機網(wǎng)站建設、電子商務、搜索引擎優(yōu)化、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)