1. 程式人生 > >PHP 二維陣列按鍵值排序

PHP 二維陣列按鍵值排序

PHP 中 array_multisort() 可以用來一次對多個數組進行排序,或者根據某一維或多維對多維陣列進行排序。關聯鍵名保持不變,但數字鍵名會被重新索引。輸入陣列被當成一個表的列並以行來排序,第一個陣列是要排序的主要陣列。陣列中的行(值)比較為相同的話就按照下一個輸入陣列中相應值的大小來排序,依此類推。

但是如果需要排序的陣列是一個二維陣列,需要按照陣列的鍵值排序,如下面這個二維陣列,需要按照 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 _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;
}

var_dump(_multi_array_sort($arr, 'sort'));