Same name and namespace in other branches
  1. 8.9.x core/tests/Drupal/Tests/Traits/Core/GeneratePermutationsTrait.php \Drupal\Tests\Traits\Core\GeneratePermutationsTrait
  2. 9 core/tests/Drupal/Tests/Traits/Core/GeneratePermutationsTrait.php \Drupal\Tests\Traits\Core\GeneratePermutationsTrait

Adds ability to convert a list of parameters into a stack of permutations.

Hierarchy

2 files declare their use of GeneratePermutationsTrait
CommentCSSTest.php in core/modules/comment/tests/src/Functional/CommentCSSTest.php
CommentLinkBuilderTest.php in core/modules/comment/tests/src/Unit/CommentLinkBuilderTest.php

File

core/tests/Drupal/Tests/Traits/Core/GeneratePermutationsTrait.php, line 10

Namespace

Drupal\Tests\Traits\Core
View source
trait GeneratePermutationsTrait {

  /**
   * Converts a list of possible parameters into a stack of permutations.
   *
   * Takes a list of parameters containing possible values, and converts all of
   * them into a list of items containing every possible permutation.
   *
   * Example:
   * @code
   * $parameters = [
   *   'one' => [0, 1],
   *   'two' => [2, 3],
   * ];
   * $permutations = $this->generatePermutations($parameters);
   * // Result:
   * $permutations == [
   *   ['one' => 0, 'two' => 2],
   *   ['one' => 1, 'two' => 2],
   *   ['one' => 0, 'two' => 3],
   *   ['one' => 1, 'two' => 3],
   * ]
   * @endcode
   *
   * @param array $parameters
   *   An associative array of parameters, keyed by parameter name, and whose
   *   values are arrays of parameter values.
   *
   * @return array[]
   *   A list of permutations, which is an array of arrays. Each inner array
   *   contains the full list of parameters that have been passed, but with a
   *   single value only.
   */
  public static function generatePermutations(array $parameters) {
    $all_permutations = [
      [],
    ];
    foreach ($parameters as $parameter => $values) {
      $new_permutations = [];

      // Iterate over all values of the parameter.
      foreach ($values as $value) {

        // Iterate over all existing permutations.
        foreach ($all_permutations as $permutation) {

          // Add the new parameter value to existing permutations.
          $new_permutations[] = $permutation + [
            $parameter => $value,
          ];
        }
      }

      // Replace the old permutations with the new permutations.
      $all_permutations = $new_permutations;
    }
    return $all_permutations;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
GeneratePermutationsTrait::generatePermutations public static function Converts a list of possible parameters into a stack of permutations.