protected function Condition::matchArray

protected Condition::matchArray(array $condition, array $data, array $needs_matching, array $parents = array())

Matches for an array representing one or more config paths.

Parameters

array $condition: The condition array as created by the condition() method.

array $data: The config array or part of it.

array $needs_matching: The list of config array keys needing a match. Can contain config keys and the * wildcard.

array $parents: The current list of parents.

Return value

bool TRUE when the condition matched to the data else FALSE.

File

core/lib/Drupal/Core/Config/Entity/Query/Condition.php, line 113

Class

Condition
Defines the condition class for the config entity query.

Namespace

Drupal\Core\Config\Entity\Query

Code

protected function matchArray(array $condition, array $data, array $needs_matching, array $parents = array()) {
  $parent = array_shift($needs_matching);
  if ($parent === '*') {
    $candidates = array_keys($data);
  }
  else {
    // Avoid a notice when calling match() later.
    if (!isset($data[$parent])) {
      $data[$parent] = NULL;
    }
    $candidates = array($parent);
  }
  foreach ($candidates as $key) {
    if ($needs_matching) {
      if (is_array($data[$key])) {
        $new_parents = $parents;
        $new_parents[] = $key;
        if ($this->matchArray($condition, $data[$key], $needs_matching, $new_parents)) {
          return TRUE;
        }
      }
    }
    // Only try to match a scalar if there are no remaining keys in
    // $needs_matching as this indicates that we are looking for a specific
    // subkey and a scalar can never match that.
    elseif ($this->match($condition, $data[$key])) {
      return TRUE;
    }
  }
  return FALSE;
}

© 2001–2016 by the original authors
Licensed under the GNU General Public License, version 2 and later.
Drupal is a registered trademark of Dries Buytaert.
https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Config!Entity!Query!Condition.php/function/Condition::matchArray/8.1.x