Nextras\Orm\Collection\Helpers\ArrayCollectionHelper::createSorter PHP Method

createSorter() public method

public createSorter ( array $conditions ) : Closure
$conditions array
return Closure
    public function createSorter(array $conditions)
    {
        $columns = [];
        foreach ($conditions as $pair) {
            list($column, , $sourceEntity) = ConditionParserHelper::parseCondition($pair[0]);
            $sourceEntityMeta = $this->metadataStorage->get($sourceEntity ?: $this->mapper->getRepository()->getEntityClassNames()[0]);
            $columns[] = [$column, $pair[1], $sourceEntityMeta];
        }
        return function ($a, $b) use($columns) {
            foreach ($columns as $pair) {
                $_a = $this->getter($a, $pair[0], $pair[2]);
                $_b = $this->getter($b, $pair[0], $pair[2]);
                $direction = $pair[1] === ICollection::ASC ? 1 : -1;
                if (is_int($_a) || is_float($_a)) {
                    if ($_a < $_b) {
                        return $direction * -1;
                    } elseif ($_a > $_b) {
                        return $direction;
                    }
                } elseif ($_a instanceof \Datetime) {
                    if ($_a < $_b) {
                        return $direction * -1;
                    } elseif ($_b > $_a) {
                        return $direction;
                    }
                } else {
                    $res = strcmp((string) $_a, (string) $_b);
                    if ($res < 0) {
                        return $direction * -1;
                    } elseif ($res > 0) {
                        return $direction;
                    }
                }
            }
            return 0;
        };
    }