根據某個鍵值對二維數組進行排序是個常見問題,這里總結一個函數,可同時對兩個鍵值分別排序,當然想要更多的話就自行解決吧.
但是如果需要排序的數組是一個二維數組,需要按照數組的鍵值排序,如下面這個二維數組,需要按照sort鍵名來排序,那么array_multisort() 就無法直接實現了.
實例一,代碼如下:
- $arr = array(
- array(
- 'sort' => 3,
- 'a' => 'a',
- 'b' => 'b'
- ),
- array(
- 'sort' => 5,
- 'a' => 'a',
- 'b' => 'b'
- ),
- array(
- 'sort' => 1,
- 'a' => 'a',
- 'b' => 'b'
- )
- );
這樣array_multisort()不不能生效了,我們可以對函數進行升級一下,根據指定鍵值進行排序,代碼如下:
- function array_sort($arr,$key1,$sort1='asc',$key2='',$sort2='asc'){
- if (!is_array($arr)){
- return $arr;
- }
- foreach($arr AS $key => $row){
- $temp[$key] = $row[$key1];
- }
- $sort1 = $sort1 == 'asc' ? SORT_ASC : SORT_DESC;
- if(!$key2){
- array_multisort($temp, $sort1,$arr);
- } else {
- foreach($arr AS $key => $row){
- $temp2[$key] = $row[$key2];
- }
- $sort2 = $sort2 == 'asc' ? SORT_ASC : SORT_DESC;
- array_multisort($temp, $sort1,$temp2,$sort2,$arr);
- }
- return $arr;
- }
實例二,代碼如下:
- 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[$k] = $arr[$k];
- }
- return $new_array;
- }
- $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)
- );
- $ShoppingList = array_sort($array,'price');
- print_r($ShoppingList);
面是對$array這個二維數組按照'price'從低到高的排序.
新聞熱點
疑難解答