diff --git a/src/SphinxQL.php b/src/SphinxQL.php index 2b11bb80..018dd203 100644 --- a/src/SphinxQL.php +++ b/src/SphinxQL.php @@ -964,6 +964,48 @@ public function from($array = null) return $this; } + + /** + * MATCH field IN (values) + * + * @param string $field The field + * @param array $values Values for IN clause + * + * @return Match + */ + public function matchFieldIN(string $field, array $values) : Match { + $match = (new Match($this))->field($field); + + /** + * Reindex array + */ + $values = array_values(array_unique($values)); + + $count = count($values); + for ($n = 0; $n < $count; $n++) { + if (!$n) { + $match->match($values[$n]); + } else { + $match->orMatch($values[$n]); + } + } + return $match; + } + + /** + * Wrap match into another match helper to build complex (A OR (B AND C)) matches + * + * @param Match[] $matches Matches to group up with AND + * + * @return Match + */ + public function matchAndMatch(array $matches) { + $match = new Match($this); + foreach ($matches as $m) { + $match->match($m); + } + return $match; + } /** * MATCH clause (Sphinx-specific)