JamesMoss\Flywheel\QueryExecuter::sort PHP Method

sort() protected method

Sorts an array of documents by multiple fields if needed.
protected sort ( array $array, array $args ) : array
$array array An array of Documents.
$args array The fields to sort by.
return array The sorted array of documents.
    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;
    }