private function equalRecurse(ClauseGroup $g1, ClauseGroup $g2, $level) { if ($g1->getType() != $g2->getType() || $g1->getCount() != $g2->getCount()) { return false; } $subClauses1 = $g1->getSubclauses(); $subClauses2 = $g2->getSubclauses(); $ok = true; for ($i = 0; $i < count($subClauses1); $i++) { $item1 = $subClauses1[$i]; $item2 = $subClauses2[$i]; if ($item1 instanceof ClauseGroup) { $ok = $this->equalRecurse($item1, $item2, $level + 1); } else { $ok = $item1 == $item2; } if (!$ok) { break; } } return $ok; }