<?php
$data = array();
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);php
// 取得列的列表
foreach ($data as $key => $row)
{
$volume[$key] = $row['volume'];
$edition[$key] = $row['edition'];
}數組
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);函數
print_r($data);
?>post
輸出結果:.net
(
[0] => Array
(
[volume] => 98
[edition] => 2
)
[1] => Array
(
[volume] => 86
[edition] => 1
)
[2] => Array
(
[volume] => 86
[edition] => 6
)
[3] => Array
(
[volume] => 85
[edition] => 6
)
[4] => Array
(
[volume] => 67
[edition] => 2
)
[5] => Array
(
[volume] => 67
[edition] => 7
)
)
關於array_multisort官方文檔也有比較詳細的說明:http://www.php.net/manual/zh/function.array-multisort.phpcode
2、自定義函數排序1
blog
<?php
$data = array();
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);
// 取得列的列表
foreach ($data as $key => $row)
{
$volume[$key] = $row['volume'];
$edition[$key] = $row['edition'];
}排序
$ret = arraySort($data, 'volume', 'desc');文檔
print_r($ret);string
/**
* @desc arraySort php二維數組排序 按照指定的key 對數組進行排序
* @param array $arr 將要排序的數組
* @param string $keys 指定排序的key
* @param string $type 排序類型 asc | desc
* @return array
*/
function arraySort($arr, $keys, $type = 'asc') {
$keysvalue = $new_array = array();
foreach ($arr as $k => $v){
$keysvalue[$k] = $v[$keys];
}
$type == 'asc' ? asort($keysvalue) : arsort($keysvalue);
reset($keysvalue);
foreach ($keysvalue as $k => $v) {
$new_array[$k] = $arr[$k];
}
return $new_array;
}
?>
輸出結果:
(
[3] => Array
(
[volume] => 98
[edition] => 2
)
[4] => Array
(
[volume] => 86
[edition] => 6
)
[1] => Array
(
[volume] => 86
[edition] => 1
)
[2] => Array
(
[volume] => 85
[edition] => 6
)
[5] => Array
(
[volume] => 67
[edition] => 7
)
[0] => Array
(
[volume] => 67
[edition] => 2
)
)
這個自定義函數與系統函數的一個區別就是:自定義函數只支持針對某一個key的排序,若是要支持多個key的排序須要執行屢次; 而系統函數array_multisort能夠一次性對多個key且能夠指定多個排序規則,系統函數仍是至關強大的,推薦使用系統函數,畢竟是C底層實現 的,這裏只是舉例說明若是經過自定義函數來對數組進行排序,固然這個自定義函數也能夠繼續擴展來支持更多的排序規則。在取排名、排行榜、成績等場景中用到 的仍是很是多的。
3、自定義函數排序2
如下函數是對一個給定的二維數組按照指定的鍵值進行排序,先看函數定義:
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'從低到高的排序。