protected function sort(array $array, array $args)
    {
        $c = count($args);

        // PHP 5.3 hack
        $self = $this;

        usort($array, function ($a, $b) use ($self, $args, $c) {
            $i   = 0;
            $cmp = 0;
            while ($cmp == 0 && $i < $c) {
                $keyName = $args[$i][0];
                if($keyName == 'id' || $keyName == '__id') {
                    $valueA = $a->getId();
                    $valueB = $b->getId();
                } else {
                    $valueA = $self->getFieldValue($a, $keyName, $found);
                    if ($found === false) {
                        $valueA = null;
                    }
                    $valueB = $self->getFieldValue($b, $keyName, $found);
                    if ($found === false) {
                        $valueB = null;
                    }
                }

                if (is_string($valueA)) {
                    $cmp = strcmp($valueA, $valueB);
                } elseif (is_bool($valueA)) {
                    $cmp = $valueA - $valueB;
                } else {
                    $cmp = ($valueA == $valueB) ? 0 : (($valueA < $valueB) ? -1 : 1);
                }

                if ($args[$i][1] === SORT_DESC) {
                    $cmp *= -1;
                }
                $i++;
            }

            return $cmp;
        });

        return $array;
    }
protected function sort(array $array, array $args)
    {
        $c = count($args);

        // PHP 5.3 hack
        $self = $this;

        usort($array, function ($a, $b) use ($self, $args, $c) {
            $i   = 0;
            $cmp = 0;
            while ($cmp == 0 && $i < $c) {
                $keyName = $args[$i][0];
                if($keyName == 'id' || $keyName == '__id') {
                    $valueA = $a->getId();
                    $valueB = $b->getId();
                } else {
                    $valueA = $self->getFieldValue($a, $keyName, $found);
                    if ($found === false) {
                        $valueA = null;
                    }
                    $valueB = $self->getFieldValue($b, $keyName, $found);
                    if ($found === false) {
                        $valueB = null;
                    }
                }

                if (is_string($valueA)) {
                    $cmp = strcmp($valueA, $valueB);
                } elseif (is_bool($valueA)) {
                    $cmp = $valueA - $valueB;
                } else {
                    $cmp = ($valueA == $valueB) ? 0 : (($valueA < $valueB) ? -1 : 1);
                }

                if ($args[$i][1] === SORT_DESC) {
                    $cmp *= -1;
                }
                $i++;
            }

            return $cmp;
        });

        return $array;
    }
protected function sort ( array $ array , array $ args ) { $ c = count ( $ args ) ; // PHP 5.3 hack $ self = $ this ; usort ( $ array , function ( $ a , $ b ) use ( $ self , $ args , $ c ) { $ i = 0 ; $ cmp = 0 ; while ( $ cmp == 0 && $ i < $ c ) { $ keyName = $ args [ $ i ] [ 0 ] ; if ( $ keyName == 'id' || $ keyName == '__id' ) { $ valueA = $ a -> getId ( ) ; $ valueB = $ b -> getId ( ) ; } else { $ valueA = $ self -> getFieldValue ( $ a , $ keyName , $ found ) ; if ( $ found === false ) { $ valueA = null ; } $ valueB = $ self -> getFieldValue ( $ b , $ keyName , $ found ) ; if ( $ found === false ) { $ valueB = null ; } } if ( is_string ( $ valueA ) ) { $ cmp = strcmp ( $ valueA , $ valueB ) ; } elseif ( is_bool ( $ valueA ) ) { $ cmp = $ valueA - $ valueB ; } else { $ cmp = ( $ valueA == $ valueB ) ? 0 : ( ( $ valueA < $ valueB ) ? - 1 : 1 ) ; } if ( $ args [ $ i ] [ 1 ] === SORT_DESC ) { $ cmp *= - 1 ; } $ i ++ ; } return $ cmp ; } ) ; return $ array ; }
Sorts an array of documents by multiple fields if needed.

@param array $array An array of Documents.
@param array $args  The fields to sort by.

@return array The sorted array of documents.
Sorts an array of documents by multiple fields if needed .