You are here

public static function GeneratePermutationsTrait::generatePermutations in Drupal 10

Same name and namespace in other branches
  1. 8 core/tests/Drupal/Tests/Traits/Core/GeneratePermutationsTrait.php \Drupal\Tests\Traits\Core\GeneratePermutationsTrait::generatePermutations()
  2. 9 core/tests/Drupal/Tests/Traits/Core/GeneratePermutationsTrait.php \Drupal\Tests\Traits\Core\GeneratePermutationsTrait::generatePermutations()

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:

$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,
  ],
];

Parameters

array $parameters: An associative array of parameters, keyed by parameter name, and whose values are arrays of parameter values.

Return value

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.

File

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

Class

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

Namespace

Drupal\Tests\Traits\Core

Code

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;
}