PHP usort Before While循环

时间:2016-05-20 18:58:25

标签: php sorting

我有一个运行查询的分页类,只返回指定的行页面。

这是关注的功能。它工作得很好,但我的问题是我想添加排序功能。

private function GetData($Query, $PageNumber, $RowsPerPage) {

    $stmt = dbQuery($Query, 'static');
    $this->TotalNumOfRows = sqlsrv_num_rows($stmt);
    $this->_NumberOfPages = ceil($this->TotalNumOfRows / $this->_RowsPerPage);
    $offset = ($PageNumber - 1) * $RowsPerPage;
    $rows = [];
    $i = 0;
    while (($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_BOTH, SQLSRV_SCROLL_ABSOLUTE, $offset + $i)) && $i < $RowsPerPage) {
        $rows[] = $row;
        $i++;
    }
    $this->CurrentPageNumOfRows = $i;

    return $rows;
}

我有一个排序函数,我用它来按列索引对数组进行排序。

function gfSortArray($a, $b) {
        $pSort = gfGetVar('pSort', 0);
        $pDir = gfGetVar('pDir', 'desc');

        if ($pDir == 'asc') {
            return strnatcmp($a[$pSort], $b[$pSort]);
        }
        else {
            return strnatcmp($b[$pSort], $a[$pSort]);
        }
}

我可以将函数添加到我的分页类中,但问题是它只对指定的行进行排序。例如1-100。但我需要在while循环之前对整个数组进行排序,以便正确排序。

这是排序功能。

private function GetData($Query, $PageNumber, $RowsPerPage) {

    $stmt = dbQuery($Query, 'static');
    $this->TotalNumOfRows = sqlsrv_num_rows($stmt);
    $this->_NumberOfPages = ceil($this->TotalNumOfRows / $this->_RowsPerPage);
    $offset = ($PageNumber - 1) * $RowsPerPage;
    $rows = [];
    $i = 0;
    while (($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_BOTH, SQLSRV_SCROLL_ABSOLUTE, $offset + $i)) && $i < $RowsPerPage) {
        $rows[] = $row;
        $i++;
    }
    $this->CurrentPageNumOfRows = $i;

    //sorting
    usort($rows, ['Paging', 'gfSortArray']);

    return $rows;
}

问题: 有没有办法在While循环之前对SQL_SRV_QUERY结果进行排序?

0 个答案:

没有答案