/** * Monta um select hierarquico * @param array $vetor Vetor hierarquico * @param string $tipo Tipo de simbolos usados para montar a estrutura (light, simple ou double) * @return string Campo select */ function montar_select($vetor, $tipo = 'light') { /* Caracteres: ║ ║ ╠ ╠ ╚ ╚ │ │ ├ ├ └ └ */ // Obter conjunto de caracteres desejados $caracteres = new stdClass(); switch ($tipo) { case 'simple': $caracteres->espaco = '   '; $caracteres->topo_baixo = '|  '; $caracteres->topo_direita_baixo = '|- '; $caracteres->topo_direita = '\'- '; break; case 'double': $caracteres->espaco = '  '; $caracteres->topo_baixo = '║ '; $caracteres->topo_direita_baixo = '╠ '; $caracteres->topo_direita = '╚ '; break; case 'light': $caracteres->espaco = '  '; $caracteres->topo_baixo = '│ '; $caracteres->topo_direita_baixo = '├ '; $caracteres->topo_direita = '└ '; break; default: trigger_error('Tipo de option invalido: '.$tipo, E_USER_WARNING); return false; } // Montar o select $select = ''; return $select; } /** * Retorna as opcoes do select de forma recursiva * @param array $vetor Vetor hierarquico * @param stdClass $caracteres Pacote de caracteres a serem usados * @param array $niveis Vetor auxiliar para montar os niveis hierarquicos * @return string */ function montar_options($vetor, $caracteres, $niveis = array()) { $chaves = array_keys($vetor); $ultima_chave = array_pop($chaves); unset($chaves); $options = ''; foreach ($vetor as $chave => $valor) { $ultimo = $ultima_chave === $chave; // Descer um nivel if (is_array($valor)) { $options .= ''; $niveis_novo = $niveis; $niveis_novo[$chave] = $ultimo; $options .= montar_options($valor, $caracteres, $niveis_novo); // Montar o nivel corrente } else { $options .= ''; } } return $options; }