php二維數組多元素排序例子

來源:互聯網
上載者:User

寫個二維數組的多元素排序,多元素排序類似sql中的order by sort,date,下面代碼考慮效能問題,只涉及2個元素進行排序。

代碼區:

function multipleArraySort($old_arr,$arr1,$arr2){
//排序第一個元素
$old_arr = array_sort($old_arr,$arr1[0],$arr1[1]);
$temp_array = $new_temp_array = array();
foreach($old_arr as $k => $v){
$key_count = count($old_arr)-1;
//第一個元素數相等,放入臨時數組
if($v[$arr1[0]] == $old_arr[$k-1][$arr1[0]] || empty($temp_array)){
$temp_array[$k] = $v;
}
if(($v[$arr1[0]] != $old_arr[$k-1][$arr1[0]] && !empty($temp_array)) || $key_count == $k){
//添加最新元素
$temp_array[$k] = $v;
//數組大於1時,進行排序處理
if(count($temp_array)>1){
if($key_count != $k){
//刪除最後一個(與上一個不相等元素)
unset($temp_array[$k]);
}
//不是最後或者最後相同,進行排序
if($key_count != $k || $v[$arr1[0]] == $old_arr[$k-1][$arr1[0]]){
//排序第二個元素
$temp_array = array_sort($temp_array,$arr2[0],$arr2[1]);
}
//排序後把排序的數組,插入原數組排序前位置
$count = count($new_temp_array)==0 ? 0 : count($new_temp_array);
foreach($temp_array as $val_t){
$new_temp_array[$count] = $val_t;
$count++;
}
//寫入新數組後清空原數組
$temp_array = array();
//添加最新元素
$temp_array[$k] = $v;
}
}
}
return $new_temp_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);
$count_s = 0;
//恢複索引值
foreach ($keysvalue as $k=>$v){
$new_array[$count_s] = $arr[$k];
$count_s++;
}
return $new_array;
}

調用方法:


$old_arr = array(
array('id'=>1,'sort'=>1,'date'=>'1405648791'),
array('id'=>2,'sort'=>1,'date'=>'1405649791'),
array('id'=>3,'sort'=>2,'date'=>'1405647791'),
);
$arr1 = array('sort','desc');
$arr2 = array('date','desc');
$newArr = multipleArraySort($old_arr,$arr1,$arr2);
var_dump($newArr);

列印結果:

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.