PHP二維數組排序問題詳解(數組索引值排序)

來源:互聯網
上載者:User

根據某個索引值對二維數組進行排序是個常見問題,這裡總結一個函數,可同時對兩個索引值分別排序,當然想要更多的話就自行解決吧。


但是如果需要排序的數組是一個二維數組,需要按照數組的索引值排序,如下面這個二維數組,需要按照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'從低到高的排序。

聯繫我們

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