php對多維陣列的某個索引值排序方法

來源:互聯網
上載者:User

   php多維陣列排序可以用array_multisort() 函數來處理,array_multisort() 函數可以用來一次對多個數組進行排序,或者根據某一維或多維對多維陣列進行排序,關聯(string)鍵名保持不變,但數字鍵名會被重新索引

  排序次序標誌:

  SORT_ASC - 按照上升順序排序

  SORT_DESC - 按照下降順序排序

  排序類型標誌:

  SORT_REGULAR - 將項目按照通常方法比較

  SORT_NUMERIC - 將項目按照數值比較

  SORT_STRING - 將項目按照字串比較

  例子 1. 對多個數組排序

 代碼如下  

<?php
$ar1 = array("10", 100, 100, "a");
$ar2 = array(1, 3, "2", 1);
array_multisort($ar1, $ar2);

var_dump($ar1);
var_dump($ar2);
?>

  本例中經過排序後,第一個數組將包含 "10","a",100,100。第二個數組將包含 1,1,"2",3。第二個數組中的項目順序完全和第一個數組中相應的項目(100 和 100)順序一致。

  但是這些都不可以指定由那個索引值進行排名了,下面我就整理了幾個函數演算法都不錯。

  範例程式碼

 代碼如下  

/**
 * 對多位元組進行排序
 * @param $multi_array 數組
 * @param $sort_key需要傳入的鍵名
 * @param $sort排序類型
 */
function multi_array_sort($multi_array, $sort_key, $sort = SORT_DESC) {
if (is_array($multi_array)) {
foreach ($multi_array as $row_array) {
if (is_array($row_array)) {
$key_array[] = $row_array[$sort_key];
} else {
return FALSE;
}
}
} else {
return FALSE;
}
array_multisort($key_array, $sort, $multi_array);
return $multi_array;
}

  例子二

 代碼如下  

 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[] = $arr[$k];
}

return $new_array;
}

  例子3

 代碼如下  

/*
function:二維數組按指定的索引值排序
author:www.111cn.net
*/
function array_sort($array,$keys,$type='asc'){
if(!isset($array) || !is_array($array) || empty($array)){
return '';
}
if(!isset($keys) || trim($keys)==''){
return '';
}
if(!isset($type) || $type=='' || !in_array(strtolower($type),array('asc','desc'))){
return '';
}
$keysvalue=array();
foreach($array as $key=>$val){
$val[$keys] = str_replace('-','',$val[$keys]);
$val[$keys] = str_replace(' ','',$val[$keys]);
$val[$keys] = str_replace(':','',$val[$keys]);
$keysvalue[] =$val[$keys];
}
asort($keysvalue); //key值排序
reset($keysvalue); //指標重新指向數組第一個
foreach($keysvalue as $key=>$vals) {
$keysort[] = $key;
}
$keysvalue = array();
$count=count($keysort);
if(strtolower($type) != 'asc'){
for($i=$count-1; $i>=0; $i--) {
$keysvalue[] = $array[$keysort[$i]];
}
}else{
for($i=0; $i<$count; $i++){
$keysvalue[] = $array[$keysort[$i]];
}
}
return $keysvalue;
}

  例如有下列這樣一個數組:

 代碼如下  

$array=array(
0=>array('id'=>8,'username'=>'phpernote'),
1=>array('id'=>9,'username'=>'com'),
2=>array('id'=>5,'username'=>'www')
);

現在需要將這個二維數組按id升序排列,則:

array_sort($array,'id','asc');

相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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