pQuery\DomNode::match_attributes PHP Метод

match_attributes() защищенный Метод

Checks if attributes match certain conditions
См. также: match()
protected match_attributes ( array $attributes ) : boolean
$attributes array array('attr' => 'val') or array(array( 'operator_value' => 'equals'/'='/'contains_regex'/etc 'attribute' => 'attr', 'value' => 'val', 'match' => true, 'operator_result' => 'or'/'and', 'compare' => 'total'/'namespace'/'name', 'case_sensitive' => true))
Результат boolean
    protected function match_attributes($attributes)
    {
        $res = false;
        foreach ($attributes as $attribute => $match) {
            if (!is_array($match)) {
                $match = array('operator_value' => 'equals', 'value' => $match, 'match' => true, 'operator_result' => 'or', 'compare' => 'total', 'case_sensitive' => false);
            } else {
                if (is_int($attribute)) {
                    $attribute = $match['attribute'];
                }
                if (!isset($match['match'])) {
                    $match['match'] = true;
                }
                if (!isset($match['operator_result'])) {
                    $match['operator_result'] = 'or';
                }
                if (!isset($match['compare'])) {
                    $match['compare'] = 'total';
                }
                if (!isset($match['case_sensitive'])) {
                    $match['case_sensitive'] = false;
                }
            }
            if (is_string($match['value']) && !$match['case_sensitive']) {
                $match['value'] = strtolower($match['value']);
            }
            if ($match['operator_result'] === 'and' && !$res) {
                return false;
            } elseif (!($res && $match['operator_result'] === 'or')) {
                $possibles = $this->findAttribute($attribute, $match['compare'], $match['case_sensitive']);
                $has = is_array($possibles) && $possibles;
                $res = $match['value'] === $has || $match['match'] === false && $has === $match['match'];
                if (!$res && $has && is_string($match['value'])) {
                    foreach ($possibles as $a) {
                        $val = $this->attributes[$a[2]];
                        if (is_string($val) && !$match['case_sensitive']) {
                            $val = strtolower($val);
                        }
                        switch ($match['operator_value']) {
                            case '%=':
                            case 'contains_regex':
                                $res = preg_match('`' . $match['value'] . '`s', $val) > 0 === $match['match'];
                                if ($res) {
                                    break 1;
                                } else {
                                    break 2;
                                }
                            case '|=':
                            case 'contains_prefix':
                                $res = preg_match('`\\b' . preg_quote($match['value']) . '[\\-\\s]`s', $val) > 0 === $match['match'];
                                if ($res) {
                                    break 1;
                                } else {
                                    break 2;
                                }
                            case '~=':
                            case 'contains_word':
                                $res = preg_match('`\\s' . preg_quote($match['value']) . '\\s`s', " {$val} ") > 0 === $match['match'];
                                if ($res) {
                                    break 1;
                                } else {
                                    break 2;
                                }
                            case '*=':
                            case 'contains':
                                $res = (strpos($val, $match['value']) !== false) === $match['match'];
                                if ($res) {
                                    break 1;
                                } else {
                                    break 2;
                                }
                            case '$=':
                            case 'ends_with':
                                $res = (substr($val, -strlen($match['value'])) === $match['value']) === $match['match'];
                                if ($res) {
                                    break 1;
                                } else {
                                    break 2;
                                }
                            case '^=':
                            case 'starts_with':
                                $res = (substr($val, 0, strlen($match['value'])) === $match['value']) === $match['match'];
                                if ($res) {
                                    break 1;
                                } else {
                                    break 2;
                                }
                            case '!=':
                            case 'not_equal':
                                $res = ($val !== $match['value']) === $match['match'];
                                if ($res) {
                                    break 1;
                                } else {
                                    break 2;
                                }
                            case '=':
                            case 'equals':
                                $res = ($val === $match['value']) === $match['match'];
                                if ($res) {
                                    break 1;
                                } else {
                                    break 2;
                                }
                            case '>=':
                            case 'bigger_than':
                                $res = $val >= $match['value'] === $match['match'];
                                if ($res) {
                                    break 1;
                                } else {
                                    break 2;
                                }
                            case '<=':
                            case 'smaller_than':
                                $res = $val >= $match['value'] === $match['match'];
                                if ($res) {
                                    break 1;
                                } else {
                                    break 2;
                                }
                            default:
                                trigger_error('Unknown operator "' . $match['operator_value'] . '" to match attributes!');
                                return false;
                        }
                    }
                }
            }
        }
        return $res;
    }
DomNode