elasticsearch_search_api-1.0.x-dev/src/Search/Facet/HierarchicalFacetValue.php

src/Search/Facet/HierarchicalFacetValue.php
<?php

namespace Drupal\elasticsearch_search_api\Search\Facet;

/**
 * Hierarchical facet values, with an ancestry.
 */
class HierarchicalFacetValue implements FacetValueInterface, HierarchicalFacetValueInterface {

  /**
   * The actual values as a hiearchical list of strings.
   *
   * @var string[]
   */
  private $values;

  /**
   * Constructor.
   *
   * @param string ...$values
   *   The values, listed in hierarchical order.
   */
  public function __construct(string ...$values) {
    $this->values = $values;
  }

  /**
   * {@inheritdoc}
   */
  public function matches(FacetValueInterface $other): bool {
    return in_array($other->value(), $this->values);
  }

  /**
   * {@inheritdoc}
   */
  public function value(): string {
    return end($this->values);
  }

  /**
   * {@inheritdoc}
   */
  public function hierarchy(): array {
    return $this->values;
  }

  /**
   * {@inheritdoc}
   */
  public function ancestors(): array {
    $count = count($this->values) - 1;
    $items = [];

    for ($i = 1; $i <= $count; $i++) {
      $values = array_slice($this->values, 0, $i);
      $items[] = new self(...$values);
    }

    return $items;
  }

  /**
   * {@inheritdoc}
   */
  public function parent(): ?HierarchicalFacetValueInterface {
    $ancestors = $this->ancestors();

    return array_pop($ancestors);
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc