trait GeneratePermutationsTrait in Drupal 9
Same name and namespace in other branches
- 8 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
- trait \Drupal\Tests\Traits\Core\GeneratePermutationsTrait
4 files declare their use of GeneratePermutationsTrait
- CommentCSSTest.php in core/
modules/ comment/ tests/ src/ Functional/ CommentCSSTest.php - CommentFieldAccessTest.php in core/
modules/ comment/ tests/ src/ Kernel/ CommentFieldAccessTest.php - CommentLinkBuilderTest.php in core/
modules/ comment/ tests/ src/ Unit/ CommentLinkBuilderTest.php - NodeRevisionPermissionsTest.php in core/
modules/ node/ tests/ src/ Functional/ NodeRevisionPermissionsTest.php
File
- core/
tests/ Drupal/ Tests/ Traits/ Core/ GeneratePermutationsTrait.php, line 8
Namespace
Drupal\Tests\Traits\CoreView 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
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
GeneratePermutationsTrait:: |
public static | function | Converts a list of possible parameters into a stack of permutations. |