public static function matches($data, $conditions, $i = null, $length = null) {
		if (!$conditions) {
			return true;
		}
		if (is_string($conditions)) {
			return (boolean) static::extract($data, $conditions);
		}
		foreach ($conditions as $condition) {
			if ($condition === ':last') {
				if ($i !== $length) {
					return false;
				}
				continue;
			} elseif ($condition === ':first') {
				if ($i !== 1) {
					return false;
				}
				continue;
			}
			if (!preg_match('/(.+?)([><!]?[=]|[><])(.*)/', $condition, $match)) {
				if (ctype_digit($condition)) {
					if ($i !== (int) $condition) {
						return false;
					}
				} elseif (preg_match_all('/(?:^[0-9]+|(?<=,)[0-9]+)/', $condition, $matches)) {
					return in_array($i, $matches[0]);
				} elseif (!isset($data[$condition])) {
					return false;
				}
				continue;
			}
			list(,$key,$op,$expected) = $match;

			if (!isset($data[$key])) {
				return false;
			}
			$val = $data[$key];

			if ($op === '=' && $expected && $expected[0] === '/') {
				return preg_match($expected, $val);
			} elseif ($op === '=' && $val != $expected) {
				return false;
			} elseif ($op === '!=' && $val == $expected) {
				return false;
			} elseif ($op === '>' && $val <= $expected) {
				return false;
			} elseif ($op === '<' && $val >= $expected) {
				return false;
			} elseif ($op === '<=' && $val > $expected) {
				return false;
			} elseif ($op === '>=' && $val < $expected) {
				return false;
			}
		}
		return true;
	}
public static function matches($data, $conditions, $i = null, $length = null) {
		if (!$conditions) {
			return true;
		}
		if (is_string($conditions)) {
			return (boolean) static::extract($data, $conditions);
		}
		foreach ($conditions as $condition) {
			if ($condition === ':last') {
				if ($i !== $length) {
					return false;
				}
				continue;
			} elseif ($condition === ':first') {
				if ($i !== 1) {
					return false;
				}
				continue;
			}
			if (!preg_match('/(.+?)([><!]?[=]|[><])(.*)/', $condition, $match)) {
				if (ctype_digit($condition)) {
					if ($i !== (int) $condition) {
						return false;
					}
				} elseif (preg_match_all('/(?:^[0-9]+|(?<=,)[0-9]+)/', $condition, $matches)) {
					return in_array($i, $matches[0]);
				} elseif (!isset($data[$condition])) {
					return false;
				}
				continue;
			}
			list(,$key,$op,$expected) = $match;

			if (!isset($data[$key])) {
				return false;
			}
			$val = $data[$key];

			if ($op === '=' && $expected && $expected[0] === '/') {
				return preg_match($expected, $val);
			} elseif ($op === '=' && $val != $expected) {
				return false;
			} elseif ($op === '!=' && $val == $expected) {
				return false;
			} elseif ($op === '>' && $val <= $expected) {
				return false;
			} elseif ($op === '<' && $val >= $expected) {
				return false;
			} elseif ($op === '<=' && $val > $expected) {
				return false;
			} elseif ($op === '>=' && $val < $expected) {
				return false;
			}
		}
		return true;
	}
public static function matches ( $ data , $ conditions , $ i = null , $ length = null ) { if ( ! $ conditions ) { return true ; } if ( is_string ( $ conditions ) ) { return ( boolean ) static :: extract ( $ data , $ conditions ) ; } foreach ( $ conditions as $ condition ) { if ( $ condition === ':last' ) { if ( $ i !== $ length ) { return false ; } continue ; } elseif ( $ condition === ':first' ) { if ( $ i !== 1 ) { return false ; } continue ; } if ( ! preg_match ( '/(.+?)([><!]?[=]|[><])(.*)/' , $ condition , $ match ) ) { if ( ctype_digit ( $ condition ) ) { if ( $ i !== ( int ) $ condition ) { return false ; } } elseif ( preg_match_all ( '/(?:^[0-9]+|(?<=,)[0-9]+)/' , $ condition , $ matches ) ) { return in_array ( $ i , $ matches [ 0 ] ) ; } elseif ( ! isset ( $ data [ $ condition ] ) ) { return false ; } continue ; } list ( , $ key , $ op , $ expected ) = $ match ; if ( ! isset ( $ data [ $ key ] ) ) { return false ; } $ val = $ data [ $ key ] ; if ( $ op === '=' && $ expected && $ expected [ 0 ] === '/' ) { return preg_match ( $ expected , $ val ) ; } elseif ( $ op === '=' && $ val != $ expected ) { return false ; } elseif ( $ op === '!=' && $ val == $ expected ) { return false ; } elseif ( $ op === '>' && $ val <= $ expected ) { return false ; } elseif ( $ op === '<' && $ val >= $ expected ) { return false ; } elseif ( $ op === '<=' && $ val > $ expected ) { return false ; } elseif ( $ op === '>=' && $ val < $ expected ) { return false ; } } return true ; }
This function can be used to see if a single item or a given XPath
match certain conditions.

@param array $data An array of data to execute the match on.
@param mixed $conditions An array of condition strings or an XPath expression.
@param integer $i Optional: The 'nth'-number of the item being matched.
@param integer $length
@return boolean
This function can be used to see if a single item or a given XPath match certain conditions .