protected function parseTree()
    {
        $string = $this->string;
        if (empty($string)) {
            return array();
        }
        $tree = array();
        $i = 0;
        $length = strlen($string);
        $isBackslash = false;
        $operand = '';
        while ($i <= $length) {
            $char = $string[$i];

            $isAND = ($char == self::AND_DELIMITER);
            $isOR = ($char == self::OR_DELIMITER);
            $isEnd = ($length == $i + 1);

            if ($isEnd) {
                if ($isBackslash && ($isAND || $isOR)) {
                    $operand = substr($operand, 0, -1);
                }
                $operand .= $char;
                $tree[] = array(self::INDEX_BOOL_OPERATOR => self::BOOL_OPERATOR_END, self::INDEX_OPERAND => $operand);
                break;
            }

            if ($isAND && !$isBackslash) {
                $tree[] = array(self::INDEX_BOOL_OPERATOR => self::BOOL_OPERATOR_AND, self::INDEX_OPERAND => $operand);
                $operand = '';
            } elseif ($isOR && !$isBackslash) {
                $tree[] = array(self::INDEX_BOOL_OPERATOR => self::BOOL_OPERATOR_OR, self::INDEX_OPERAND => $operand);
                $operand = '';
            } else {
                if ($isBackslash && ($isAND || $isOR)) {
                    $operand = substr($operand, 0, -1);
                }
                $operand .= $char;
            }
            $isBackslash = ($char == "\\");
            $i++;
        }
        return $tree;
    }
protected function parseTree()
    {
        $string = $this->string;
        if (empty($string)) {
            return array();
        }
        $tree = array();
        $i = 0;
        $length = strlen($string);
        $isBackslash = false;
        $operand = '';
        while ($i <= $length) {
            $char = $string[$i];

            $isAND = ($char == self::AND_DELIMITER);
            $isOR = ($char == self::OR_DELIMITER);
            $isEnd = ($length == $i + 1);

            if ($isEnd) {
                if ($isBackslash && ($isAND || $isOR)) {
                    $operand = substr($operand, 0, -1);
                }
                $operand .= $char;
                $tree[] = array(self::INDEX_BOOL_OPERATOR => self::BOOL_OPERATOR_END, self::INDEX_OPERAND => $operand);
                break;
            }

            if ($isAND && !$isBackslash) {
                $tree[] = array(self::INDEX_BOOL_OPERATOR => self::BOOL_OPERATOR_AND, self::INDEX_OPERAND => $operand);
                $operand = '';
            } elseif ($isOR && !$isBackslash) {
                $tree[] = array(self::INDEX_BOOL_OPERATOR => self::BOOL_OPERATOR_OR, self::INDEX_OPERAND => $operand);
                $operand = '';
            } else {
                if ($isBackslash && ($isAND || $isOR)) {
                    $operand = substr($operand, 0, -1);
                }
                $operand .= $char;
            }
            $isBackslash = ($char == "\\");
            $i++;
        }
        return $tree;
    }
protected function parseTree ( ) { $ string = $ this -> string ; if ( empty ( $ string ) ) { return array ( ) ; } $ tree = array ( ) ; $ i = 0 ; $ length = strlen ( $ string ) ; $ isBackslash = false ; $ operand = '' ; while ( $ i <= $ length ) { $ char = $ string [ $ i ] ; $ isAND = ( $ char == self :: AND_DELIMITER ) ; $ isOR = ( $ char == self :: OR_DELIMITER ) ; $ isEnd = ( $ length == $ i + 1 ) ; if ( $ isEnd ) { if ( $ isBackslash && ( $ isAND || $ isOR ) ) { $ operand = substr ( $ operand , 0 , - 1 ) ; } $ operand .= $ char ; $ tree [ ] = array ( self :: INDEX_BOOL_OPERATOR => self :: BOOL_OPERATOR_END , self :: INDEX_OPERAND => $ operand ) ; break ; } if ( $ isAND && ! $ isBackslash ) { $ tree [ ] = array ( self :: INDEX_BOOL_OPERATOR => self :: BOOL_OPERATOR_AND , self :: INDEX_OPERAND => $ operand ) ; $ operand = '' ; } elseif ( $ isOR && ! $ isBackslash ) { $ tree [ ] = array ( self :: INDEX_BOOL_OPERATOR => self :: BOOL_OPERATOR_OR , self :: INDEX_OPERAND => $ operand ) ; $ operand = '' ; } else { if ( $ isBackslash && ( $ isAND || $ isOR ) ) { $ operand = substr ( $ operand , 0 , - 1 ) ; } $ operand .= $ char ; } $ isBackslash = ( $ char == "\\" ) ; $ i ++ ; } return $ tree ; }
Given a filter string,
will parse it into an array where each row contains the boolean operator applied to it,
and the operand

@return array
Given a filter string will parse it into an array where each row contains the boolean operator applied to it and the operand