OptGroup.php

Same filename in other branches
  1. 9 core/lib/Drupal/Core/Form/OptGroup.php
  2. 10 core/lib/Drupal/Core/Form/OptGroup.php
  3. 11.x core/lib/Drupal/Core/Form/OptGroup.php

Namespace

Drupal\Core\Form

File

core/lib/Drupal/Core/Form/OptGroup.php

View source
<?php

namespace Drupal\Core\Form;


/**
 * Provides helpers for HTML option groups.
 */
class OptGroup {
    
    /**
     * Allows PHP array processing of multiple select options with the same value.
     *
     * Used for form select elements which need to validate HTML option groups
     * and multiple options which may return the same value. Associative PHP
     * arrays cannot handle these structures, since they share a common key.
     *
     * @param array $array
     *   The form options array to process.
     *
     * @return array
     *   An array with all hierarchical elements flattened to a single array.
     */
    public static function flattenOptions(array $array) {
        $options = [];
        static::doFlattenOptions($array, $options);
        return $options;
    }
    
    /**
     * Iterates over an array building a flat array with duplicate keys removed.
     *
     * This function also handles cases where objects are passed as array values.
     *
     * @param array $array
     *   The form options array to process.
     * @param array $options
     *   The array of flattened options.
     */
    protected static function doFlattenOptions(array $array, array &$options) {
        foreach ($array as $key => $value) {
            if (is_object($value) && isset($value->option)) {
                static::doFlattenOptions($value->option, $options);
            }
            elseif (is_array($value)) {
                static::doFlattenOptions($value, $options);
            }
            else {
                $options[$key] = $value;
            }
        }
    }

}

Classes

Title Deprecated Summary
OptGroup Provides helpers for HTML option groups.

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