# Select

Select field renders a native select element. Supports [`optgroups`](/v0.9/fields/select.md#optgroups) and [`disabled` attributes](/v0.9/fields/select.md#disabled).

## Example configuration

```php
...
array(
    'title' => 'My select field title',
    'id' => 'select-option',
    'desc' => 'Short description for the field',
    'tab' => 'main',
    'type' => 'select',
    'choices' => ['First option', 'Second option', 'Third option']
),
...
```

This will produce the following

![](/files/-MJYrktZSHxBUhxb9Jpz)

It will use the option text as the value. If you wish to separate values from option texts use the following syntax for the `choices` key:

```php
...
'choices' => array(
    array(
        'value' => 'First value',
        'label' => 'First option',
    ),
    array(
        'value' => 'Second value',
        'label' => 'Second option',
    ),
    array(
        'value' => 'Third value',
        'label' => 'Third option',
    ),
)
...
```

## `disabled`

If `disabled` keys are specified, they'll be respected. E.g:

```php
...
'choices' => array(
    array(
        'value' => 'First value',
        'label' => 'First option',
    ),
    array(
        'value' => 'Second value',
        'label' => 'Second option',
    ),
    array(
        'value' => 'Third value',
        'label' => 'Third option',
        'disabled' => true,
    ),
)
...
```

will result in the following

![](/files/-MJYrkt_YU6NJjc8g81p)

Notice that the third option is not selectable.

## `optgroups`

You can create complex select elements with `optgroups`. To do that, use the `optgroups` key instead of `choices`. Each `optgroup` has the following signature:

```php
array(
    'label' => 'Label text',
    'choices' => array(),
),
```

where `label` will store the text for the `label` attribute and `choices` is an array of options like in the example configuration.

The following configuration

```php
...
'optgroups' => array(
    array(
        'label' => 'Label one',
        'choices' => array(
            array(
                'value' => 'Label one first',
                'label' => 'First option',
            ),
            array(
                'value' => 'Label one second',
                'label' => 'Second option',
                'disabled' => true,
            ),
            array(
                'value' => 'Label one third',
                'label' => 'Third option',
            ),
        ),
    ),
    array(
        'label' => 'Label two',
        'disabled' => true,
        'choices' => ['one', 'two', 'three'],
    ),
    array(
        'label' => 'Label three',
        'choices' => array(
            array(
                'value' => 'Label three first',
                'label' => 'First option',
            ),
            array(
                'value' => 'Label three first',
                'label' => 'Second option',
                'disabled' => true,
            ),
        ),
    ),
),
...
```

will result in the following

![](/files/-MJYrktaaL1dm20y5B1v)

Note that the whole second `optgroup` is disabled because the `disabled` key is specified for the `optgoup` itself, not like individual `disabled` keys in groups 1 and 3.

## Params

| Name        | Type   | Description                                                                                                                                         |
| ----------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| `type`      | string | `select` **(required)**                                                                                                                             |
| `id`        | string | Unique ID that will be used to retrieve the value **(required)**                                                                                    |
| `tab`       | string | Specifies in which tab this option will be rendered                                                                                                 |
| `title`     | string | Shows a heading to the left of the field                                                                                                            |
| `desc`      | string | Shows a description text (can have HTML)                                                                                                            |
| `choices`   | array  | Can be an array of strings or an array of arrays with `value` and `label` keys. See [examples](/v0.9/fields/select.md#example-configuration) above. |
| `optgroups` | array  | Array of arrays with `label` and `choices` keys. See [`optgroups`](/v0.9/fields/select.md#optgroups) above.                                         |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.alchemy-options.com/v0.9/fields/select.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
