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