public static function compareIterators(\Iterator $lhs, \Iterator $rhs, $identical = false)
    {
        if ($lhs instanceof \RecursiveIterator) {
            if ($rhs instanceof \RecursiveIterator) {
                $it = new RecursiveDualIterator($lhs, $rhs, self::CURRENT_0 | self::KEY_0);
                $it = new RecursiveCompareDualIterator($it);
            } else {
                return false;
            }
        } else {
            $it = new DualIterator($lhs, $rhs, self::CURRENT_0 | self::KEY_0);
        }

        if ($identical) {
            foreach ($it as $n) {
                if (!$it->areIdentical()) {
                    return false;
                }
            }
        } else {
            foreach ($it as $n) {
                if (!$it->areEqual()) {
                    return false;
                }
            }
        }

        return $identical ? $it->areIdentical() : $it->areEqual();
    }
public static function compareIterators(\Iterator $lhs, \Iterator $rhs, $identical = false)
    {
        if ($lhs instanceof \RecursiveIterator) {
            if ($rhs instanceof \RecursiveIterator) {
                $it = new RecursiveDualIterator($lhs, $rhs, self::CURRENT_0 | self::KEY_0);
                $it = new RecursiveCompareDualIterator($it);
            } else {
                return false;
            }
        } else {
            $it = new DualIterator($lhs, $rhs, self::CURRENT_0 | self::KEY_0);
        }

        if ($identical) {
            foreach ($it as $n) {
                if (!$it->areIdentical()) {
                    return false;
                }
            }
        } else {
            foreach ($it as $n) {
                if (!$it->areEqual()) {
                    return false;
                }
            }
        }

        return $identical ? $it->areIdentical() : $it->areEqual();
    }
public static function compareIterators ( \ Iterator $ lhs , \ Iterator $ rhs , $ identical = false ) { if ( $ lhs instanceof \ RecursiveIterator ) { if ( $ rhs instanceof \ RecursiveIterator ) { $ it = new RecursiveDualIterator ( $ lhs , $ rhs , self :: CURRENT_0 | self :: KEY_0 ) ; $ it = new RecursiveCompareDualIterator ( $ it ) ; } else { return false ; } } else { $ it = new DualIterator ( $ lhs , $ rhs , self :: CURRENT_0 | self :: KEY_0 ) ; } if ( $ identical ) { foreach ( $ it as $ n ) { if ( ! $ it -> areIdentical ( ) ) { return false ; } } } else { foreach ( $ it as $ n ) { if ( ! $ it -> areEqual ( ) ) { return false ; } } } return $ identical ? $ it -> areIdentical ( ) : $ it -> areEqual ( ) ; }
Compare two iterators.

@param \Iterator $lhs       Left  Hand Side Iterator
@param \Iterator $rhs       Right Hand Side Iterator
@param boolean   $identical Whether to use areEqual() or areIdentical()

@return boolean whether both iterators are equal/identical

@note If one implements RecursiveIterator the other must do as well.
And if both do then a recursive comparison is being used.
Compare two iterators .