I am struggling with an array that I want to turn into a nested <select>
I need:
<select> <option value="1">Top1</option> <option value="2">Top2</option> <option value="9">Top3</option> <option value="7"> - - Top3.1</option> <option value="5"> - - Top3.2</option> <option value="12">- - - - Top3.2.1</option> <option value="6">Top4</option> <option value="4">Top5</option> <option value="8"> - - Top5.1</option> <option value="3"> - - Top5.2</option>
I can’t work with optgroup, because everything can be chosen. As far as I know, you cannot select optgroup tags.
My array looks like this:
[44] => Array ( [id] => 1 [name] => Test [slug] => test [parent] => 0 ) [45] => Array ( [id] => 2 [name] => Test-Sub [slug] => test-sub [parent] => 1 ) [46] => Array ( [id] => 3 [name] => Test-Sub-Sub [slug] => test-sub-sub [parent] => 2 )
It seems to me that I have tried dozens of options, but I can not choose the right form.
This was my last attempt:
function toDropdown($arr) { foreach ($arr as $row) { $cat[$row['id']] = $row['name']; if ($row['parent'] != 0) { $cat[$row['id']] = '--' . $row['name']; } } return $cat; }
But in this way, it is ordered by identifier, and nesting loses its meaning.
I will try to continue, but if someone can help, I appreciate any help!
EDIT: PHP data
My function to get all categories from the database:
function get_categories($parent = 'all') { $this->db->select('categories.id, categories.name, categories.slug, categories.parent'); $this->db->from('categories'); if ($query = $this->db->get()) { return $query->result_array(); } return FALSE; }
My view.php, where I output all the data:
$query = $this->datei_model->get_categories('all'); foreach ($query as $row) { $parents[] = $row; } $tree = buildTree($parents); print("<select>\n"); printTree($tree); print("</select>");
arrays php nested hierarchy
suntrop
source share