src/Filter/Rules/Condition/ConditionOr.php
public function getMatchingIds()
    {
        $arrIds = array();
        foreach ($this->arrChildFilters as $objChildFilter) {
            $arrChildMatches = $objChildFilter->getMatchingIds();
            // NULL => all items - for OR conditions, this can never be more than all so we are already satisfied here.
            if ($arrChildMatches === null) {
                return null;
            }

            if ($arrChildMatches && $this->stopAfterMatch) {
                return $arrChildMatches;
            }

            if ($arrChildMatches) {
                $arrIds = array_merge($arrIds, $arrChildMatches);
            }
        }

        return array_unique($arrIds);
    }
public function getMatchingIds()
    {
        $arrIds = array();
        foreach ($this->arrChildFilters as $objChildFilter) {
            $arrChildMatches = $objChildFilter->getMatchingIds();
            // NULL => all items - for OR conditions, this can never be more than all so we are already satisfied here.
            if ($arrChildMatches === null) {
                return null;
            }

            if ($arrChildMatches && $this->stopAfterMatch) {
                return $arrChildMatches;
            }

            if ($arrChildMatches) {
                $arrIds = array_merge($arrIds, $arrChildMatches);
            }
        }

        return array_unique($arrIds);
    }
Fetch the ids from all child filter rules.

If no entries have been found, the result is an empty array.
If no filtering was applied and therefore all ids shall be reported as
valid, the return value of NULL is allowed.

The OR filter rule has an embedded shortcut for the first rule that
returns "null". When this happens, no further child rules will get
evaluated, as the result set can not expand any further.

Note: when "stopAfterMatch" has been set, the rule will stop processing
also when the first rule returns a non empty result and return that
result.

@return string[]|null