original_string: 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);
      }
code: 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);
      }
code_tokens: 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 ) ; }
docstring: Method for the recursive descend
  
  @param array $labelParts
  @param DataTable $dataTable
  @return Row|bool
docstring_tokens: Method for the recursive descend