PHP 二維數組根據某個欄位排序的具體實現

來源:互聯網
上載者:User

 本文記錄的要實現的功能類似於 MySQL 中的 ORDER BY,上個項目中有遇到這樣的一個需求。 

要求:從兩個不同的表中擷取各自的4條資料,然後整合(array_merge)成一個數組,再根據資料的建立時間降序排序取前4條。 

遇到這個要求的時候就不是 ORDER BY 能解決的問題了。因此翻看 PHP 手冊尋找到了如下方法,做此筆記。

廢話少說,奉上代碼,清單如下: 

.代碼如下:
<?php 
/** 
* 二維數組根據某個欄位排序 
* 功能:按照使用者的年齡倒序排序 
* @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); 

/* 
輸出結果: 

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 

*/ 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.