根据指定的键对多维数组排序,可以按照多个键排序
我们通常有一些多维数组需要排序:
$guys = array( array( 'name' => 'jake', 'score' => 80, 'grade' => 'A' ), array( 'name' => 'jin', 'score' => 70, 'grade' => 'A' ), array( 'name' => 'john', 'score' => 80, 'grade' => 'A' ), array( 'name' => 'ben', 'score' => 20, 'grade' => 'B' ) );
例如我们想按成绩倒序排列,如果成绩相同就按名字的升序排列。
我们就可以用下面这个函数进行排序:
如果仅按照score排序:
$rows = list_orderByMultiCols($rows, array('score' => 'SORT_DESC'));
如果仅按照score,name排序:
$rows = list_orderByMultiCols($rows, array('score' => 'SORT_DESC', 'name' => 'SORT_ASC'));
其中用到了array_multisort函数:
他的排序方式有:SORT_ASC 升序,SORT_DESC 倒序
具体函数代码如下:
/* * @param array $rowset 要排序的数组/行集 * @param array $args 排序的键 * * @return array 排序后的数组 */ function list_orderByMultiCols($rowset, $args) { $orderArray = array(); $orderRule = ''; foreach ($args as $orderField => $orderDir) { foreach ($rowset as $offset => $row) { $orderArray[$orderField][$offset] = $row[$orderField]; } $orderRule .= '$orderArray[\'' . $orderField . '\'], ' . $orderDir . ', '; } if (empty($orderArray) || empty($orderRule)) { return $rowset; } eval('array_multisort(' . $orderRule . '$rowset);'); return $rowset; }
☜☞梦想总是要有的,万一实现了呢☜☞