trait GeneratePermutationsTrait

Same name in other branches
  1. 8.9.x core/tests/Drupal/Tests/Traits/Core/GeneratePermutationsTrait.php \Drupal\Tests\Traits\Core\GeneratePermutationsTrait
  2. 10 core/tests/Drupal/Tests/Traits/Core/GeneratePermutationsTrait.php \Drupal\Tests\Traits\Core\GeneratePermutationsTrait
  3. 11.x 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

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\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

Title Sort descending Modifiers Object type Summary
GeneratePermutationsTrait::generatePermutations public static function Converts a list of possible parameters into a stack of permutations.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.