Créer des listes de liste de tableau PHP pour le menu déroulant, sélectionnez le champ

Je suis aux prises avec un tableau que je veux transformer en un imbriquée < select >

J'ai besoin de:

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

Je ne peux pas travailler avec "optgroup", parce que tout est sélectionnable. Autant que je sache, vous ne pouvez pas sélectionner "optgroup" les étiquettes.

Mon tableau ressemble à ceci:

[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
    )

Je me sens comme j'ai essayé des dizaines de variantions, mais je ne peux pas créer mon formulaire, choisissez " la droite.

C'était mon dernier essai:

function toDropdown($arr)
    {
        foreach ($arr as $row) {
            $cat[$row['id']] = $row['name'];
            if ($row['parent'] != 0) {
                $cat[$row['id']] = '--' . $row['name'];
            }
        }
        return $cat;
    }

Mais de cette façon, il est ordonné par l'ID et la nidification perd de son sens.

Je vais essayer de continuer, mais si quelqu'un peut aider j'apprécie toute l'aide!


EDIT: PHP les Données


Ma fonction pour obtenir toutes les catégories à partir de la DB:

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;
}

Mon view.php où je l'ai sortie de toutes les données:

$query = $this->datei_model->get_categories('all');

foreach ($query as $row)
{
    $parents[] = $row;
}

$tree = buildTree($parents);

print("<select>\n");
printTree($tree);
print("</select>");

OriginalL'auteur suntrop | 2013-01-30