private function doFilterRecursiveDescend($labelParts, $dataTable)
    {
        // we need to make sure to rebuild the index as some filters change the label column directly via
        // $row->setColumn('label', '') which would not be noticed in the label index otherwise.
        $dataTable->rebuildIndex();

        // search for the first part of the tree search
        $labelPart = array_shift($labelParts);

        $row = false;
        foreach ($this->getLabelVariations($labelPart) as $labelPart) {
            $row = $dataTable->getRowFromLabel($labelPart);
            if ($row !== false) {
                break;
            }
        }

        if ($row === false) {
            // not found
            return false;
        }

        // end of tree search reached
        if (count($labelParts) == 0) {
            return $row;
        }

        $subTable = $this->loadSubtable($dataTable, $row);
        if ($subTable === null) {
            // no more subtables but label parts left => no match found
            return false;
        }

        return $this->doFilterRecursiveDescend($labelParts, $subTable);
    }
private function doFilterRecursiveDescend($labelParts, $dataTable)
    {
        // we need to make sure to rebuild the index as some filters change the label column directly via
        // $row->setColumn('label', '') which would not be noticed in the label index otherwise.
        $dataTable->rebuildIndex();

        // search for the first part of the tree search
        $labelPart = array_shift($labelParts);

        $row = false;
        foreach ($this->getLabelVariations($labelPart) as $labelPart) {
            $row = $dataTable->getRowFromLabel($labelPart);
            if ($row !== false) {
                break;
            }
        }

        if ($row === false) {
            // not found
            return false;
        }

        // end of tree search reached
        if (count($labelParts) == 0) {
            return $row;
        }

        $subTable = $this->loadSubtable($dataTable, $row);
        if ($subTable === null) {
            // no more subtables but label parts left => no match found
            return false;
        }

        return $this->doFilterRecursiveDescend($labelParts, $subTable);
    }
private function doFilterRecursiveDescend ( $ labelParts , $ dataTable ) { // we need to make sure to rebuild the index as some filters change the label column directly via // $row->setColumn('label', '') which would not be noticed in the label index otherwise. $ dataTable -> rebuildIndex ( ) ; // search for the first part of the tree search $ labelPart = array_shift ( $ labelParts ) ; $ row = false ; foreach ( $ this -> getLabelVariations ( $ labelPart ) as $ labelPart ) { $ row = $ dataTable -> getRowFromLabel ( $ labelPart ) ; if ( $ row !== false ) { break ; } } if ( $ row === false ) { // not found return false ; } // end of tree search reached if ( count ( $ labelParts ) == 0 ) { return $ row ; } $ subTable = $ this -> loadSubtable ( $ dataTable , $ row ) ; if ( $ subTable === null ) { // no more subtables but label parts left => no match found return false ; } return $ this -> doFilterRecursiveDescend ( $ labelParts , $ subTable ) ; }
Method for the recursive descend

@param array $labelParts
@param DataTable $dataTable
@return Row|bool
Method for the recursive descend