Flow\JSONPath\Filters\QueryMatchFilter::filter PHP Method

filter() public method

public filter ( array $collection ) : array
$collection array
return array
    public function filter($collection)
    {
        $return = [];
        preg_match('/^' . static::MATCH_QUERY_OPERATORS . '$/x', $this->token->value, $matches);
        if (!isset($matches[1])) {
            throw new \Exception("Malformed filter query");
        }
        $key = $matches['key'] ?: $matches['keySquare'];
        if ($key === "") {
            throw new \Exception("Malformed filter query: key was not set");
        }
        $operator = isset($matches['operator']) ? $matches['operator'] : null;
        $comparisonValue = isset($matches['comparisonValue']) ? $matches['comparisonValue'] : null;
        if (strtolower($comparisonValue) === "false") {
            $comparisonValue = false;
        }
        if (strtolower($comparisonValue) === "true") {
            $comparisonValue = true;
        }
        if (strtolower($comparisonValue) === "null") {
            $comparisonValue = null;
        }
        $comparisonValue = preg_replace('/^[\'"]/', '', $comparisonValue);
        $comparisonValue = preg_replace('/[\'"]$/', '', $comparisonValue);
        foreach ($collection as $value) {
            if (AccessHelper::keyExists($value, $key, $this->magicIsAllowed)) {
                $value1 = AccessHelper::getValue($value, $key, $this->magicIsAllowed);
                if ($operator === null && AccessHelper::keyExists($value, $key, $this->magicIsAllowed)) {
                    $return[] = $value;
                }
                if (($operator === "=" || $operator === "==") && $value1 == $comparisonValue) {
                    $return[] = $value;
                }
                if (($operator === "!=" || $operator === "!==" || $operator === "<>") && $value1 != $comparisonValue) {
                    $return[] = $value;
                }
                if ($operator == ">" && $value1 > $comparisonValue) {
                    $return[] = $value;
                }
                if ($operator == "<" && $value1 < $comparisonValue) {
                    $return[] = $value;
                }
            }
        }
        return $return;
    }
QueryMatchFilter