PHP 多列排序,不需要整天构建列数组.

来源:互联网 发布:java actionperformed 编辑:程序博客网 时间:2024/05/21 11:32

PHP 多列排序,不需要整天构建列数组.

/** * 根据指定的键对数组排序 * * 用法: * $rows = array( * array('id' => 1, 'value' => '1-1', 'parent' => 1), * array('id' => 2, 'value' => '2-1', 'parent' => 1), * array('id' => 3, 'value' => '3-1', 'parent' => 1), * array('id' => 4, 'value' => '4-1', 'parent' => 2), * array('id' => 5, 'value' => '5-1', 'parent' => 2), * array('id' => 6, 'value' => '6-1', 'parent' => 3), * ); * * $rows = sortByCol($rows, 'id', SORT_DESC); * dump($rows); * // 输出结果为: * // array( * // array('id' => 6, 'value' => '6-1', 'parent' => 3), * // array('id' => 5, 'value' => '5-1', 'parent' => 2), * // array('id' => 4, 'value' => '4-1', 'parent' => 2), * // array('id' => 3, 'value' => '3-1', 'parent' => 1), * // array('id' => 2, 'value' => '2-1', 'parent' => 1), * // array('id' => 1, 'value' => '1-1', 'parent' => 1), * // ) * * @param array $array    要排序的数组 * @param string $keyname    排序的键 * @param int $dir    排序方向 * @return array 排序后的数组 */function sortByCol($array, $keyname, $dir = SORT_ASC) {    return sortByMultiCols ( $array, array ($keyname => $dir) );}/** * @desc    将一个二维数组按照多个列进行排序,类似 SQL 语句中的 ORDER BY<br/> * 用法:<br/> * $rows = sortByMultiCols($rows, array(<br/> *           'parent' => SORT_ASC, <br/> *           'name' => SORT_DESC,<br/> * ));<br/> * @param array $rowset    要进行排序的源数组 * @param array $args    排序规则,例如array('parent' => SORT_ASC,'name' => SORT_DESC)); * @return array */function sortByMultiCols($rowset, $args) {    $sortArray = array ();    $sortRule = '';    foreach ( $args as $sortField => $sortDir ) {        foreach ( $rowset as $offset => $row ) {            $sortArray [$sortField] [$offset] = $row [$sortField];        }        $sortRule .= '$sortArray[\'' . $sortField . '\'], ' . $sortDir . ', ';    }    if (empty ( $sortArray ) || empty ( $sortRule )) {        return $rowset;    }    eval ( 'array_multisort(' . $sortRule . '$rowset);' );    return $rowset;}
原创粉丝点击