phphtmlcakephphtml-selectoptgroup

Dynamically Generating Select OptGroup Options in PHP


i have an array as follows and i want to build a nested options of Select DropDown

array(
    (int) 0 => array(
        'ProductCategory' => array(
            'id' => '5',
            'name' => 'Mud',
            'parent_id' => '0'
        ),
        'children' => array(
            (int) 0 => array(
                'ProductCategory' => array(
                    'id' => '6',
                    'name' => 'Sand',
                    'parent_id' => '5'
                ),
                'children' => array(
                    (int) 0 => array(
                        'ProductCategory' => array(
                            'id' => '7',
                            'name' => 'Soil',
                            'parent_id' => '6'
                        ),
                        'children' => array()
                    )
                )
            )
        )
    ),
    (int) 1 => array(
        'ProductCategory' => array(
            'id' => '8',
            'name' => 'House',
            'parent_id' => '0'
        ),
        'children' => array(
            (int) 0 => array(
                'ProductCategory' => array(
                    'id' => '9',
                    'name' => 'Door',
                    'parent_id' => '8'
                ),
                'children' => array(
                    (int) 0 => array(
                        'ProductCategory' => array(
                            'id' => '11',
                            'name' => 'Latch',
                            'parent_id' => '9'
                        ),
                        'children' => array()
                    ),
                    (int) 1 => array(
                        'ProductCategory' => array(
                            'id' => '12',
                            'name' => 'Glass',
                            'parent_id' => '9'
                        ),
                        'children' => array(
                            (int) 0 => array(
                                'ProductCategory' => array(
                                    'id' => '13',
                                    'name' => 'Semi ',
                                    'parent_id' => '12'
                                ),
                                'children' => array()
                            )
                        )
                    )
                )
            ),
            (int) 1 => array(
                'ProductCategory' => array(
                    'id' => '10',
                    'name' => 'Window',
                    'parent_id' => '8'
                ),
                'children' => array()
            )
        )
    )
)

Am looking for an Efficient way to loop through and create HTML Code as follows. I am not sure how many level it will have. so i need a proof looping.

<select>
    <optgroup label="Level One">
     <option> A.1 </option>
     <optgroup label="Level Two">
      <option> A.B.1 </option>
     </optgroup>
     <option> A.2 </option>
    </optgroup>
</select>

Example of Nested Look via Dropdown

News
--Sport
----Sky
----Football
------Football-1
--War
----War1
--tech
Article
--tech
----tech2
------tech3
--php
--linux

Solution

  • There is no solution to use multilevel deep in select tag (HTML restrictions).

    But You can build simple dropdown without optgroup using HtmlHelper::nestedList();