Parsed: 116846

  public function filter( $args = array(), $operator = 'AND' ) {
    if ( empty( $args ) ) {
      return $this->output;
    }

    $operator = strtoupper( $operator );

    if ( ! in_array( $operator, array( 'AND', 'OR', 'NOT' ), true ) ) {
      $this->output = array();
      return $this->output;
    }

    $count    = count( $args );
    $filtered = array();

    foreach ( $this->output as $key => $obj ) {
      $matched = 0;

      foreach ( $args as $m_key => $m_value ) {
        if ( is_array( $obj ) ) {
          // Treat object as an array.
          if ( array_key_exists( $m_key, $obj ) && ( $m_value == $obj[ $m_key ] ) ) {
            ++$matched;
          }
        } elseif ( is_object( $obj ) ) {
          // Treat object as an object.
          if ( isset( $obj->{$m_key} ) && ( $m_value == $obj->{$m_key} ) ) {
            ++$matched;
          }
        }
      }

      if ( ( 'AND' === $operator && $matched === $count )
        || ( 'OR' === $operator && $matched > 0 )
        || ( 'NOT' === $operator && 0 === $matched )
      ) {
        $filtered[ $key ] = $obj;
      }
    }

    $this->output = $filtered;

    return $this->output;
  }