PHP: ¿Cómo puedo crear por medio de una función un menu de lista pasandole como parámetros el nombre, cadena de etiquetas y cadena de valores?

De Foros del Web

Puedes utilizar esta pequeña función creada por mi (lee las notas IMPORTANTES)

Código PHP:

/* ### Function to create listbox from values and labels in arrays (Nº labels = Nº values). ###
* Compatible with PHP4 (function array_combine() must be present).
* @param string $nombre: The SELECT name.
* @param string $arr_etiquetas (comma separated or \n): The labels of the SELECT.
* @param string $arr_valores (comma separated or \n): The values of the SELECT.
* ************************************************************************************
* Author: Jean Pierre Martínez @ 26-07-2004 13:45 [jp@e-designet.com]
* 
* Por favor notificame antes o después de realizar cualquier cambio, te lo agradeceré. :P
*/
function combinedListbox ($nombre, $str_etiquetas, $str_valores) {
if (!isset($nombre)) {
trigger_error('combinedListbox() expects parameter 1 to be defined, NULL given', E_USER_WARNING); 
     return null;
}
if (!is_string($str_etiquetas)) {
trigger_error('combinedListbox() expects parameter 2 to be string, '.gettype($str_etiquetas).' given', E_USER_WARNING); 
     return null;
}
if (!is_string($str_valores)) {
trigger_error('combinedListbox() expects parameter 3 to be string, '.gettype($str_valores).' given', E_USER_WARNING); 
     return null;
}
 
// Creamos array con elementos de etiqueta/valor (debe ser la misma cantidad en ambos).
$arr_etiquetas = split("[,\n]", $str_etiquetas);
$arr_valores = split("[,\n]", $str_valores);
 
// Verificar que la cantidad de etiquetas sea igual al de valores.
if (count($arr_etiquetas) != count($arr_valores)) {
trigger_error('combinedListbox() must contain an equal number of keys and values', E_USER_WARNING); 
     return null;
}
 
// Crear array de elementos combinados.
$array_listbox = array_combine($arr_etiquetas, $arr_valores);
 
$listbox = "<SELECT NAME=\"$nombre\">\n";
foreach ($array_listbox as $etiqueta => $valor)
{
$etiqueta = trim($etiqueta);
$valor = trim($valor);
$listbox .= " <OPTION VALUE=\"$valor\">$etiqueta</OPTION>\n";
}
$listbox .= "</SELECT>\n";
return $listbox;
}  

IMPORTANTE: Esta función utiliza la función (valga la redundancia) del lenguaje array_combine() que viene incluida con PHP5, para los usuarios de PHP4 pueden utilizar ésta misma función del mismo nombre la cual, en caso de trasladar la funcion combinedListbox() a PHP5, no entrará en conflicto con la que trae ésta.

Código PHP:

// Función 'array_combine' para PHP4.
if (!function_exists('array_combine')) 
{ 
    function array_combine($keys, $values) 
    { 
        if (!is_array($keys)) { 
            trigger_error('array_combine() expects parameter 1 to be array, ' . gettype($keys) . ' given', E_USER_WARNING); 
            return null; 
        } 
        if (!is_array($values)) { 
            trigger_error('array_combine() expects parameter 2 to be array, ' . gettype($values) . ' given', E_USER_WARNING); 
            return null; 
        } 
        if (count($keys) !== count($values)) { 
            trigger_error('array_combine() Both parameters should have equal number of elements', E_USER_WARNING); 
            return false; 
        } 
        if (count($keys) === 0 || count($values) === 0) { 
            trigger_error('array_combine() Both parameters should have number of elements at least 0', E_USER_WARNING); 
            return false; 
        } 
        $keys    = array_values($keys); 
        $values = array_values($values); 
        $combined = array (); 
        for ($i = 0, $cnt = count($values); $i < $cnt; $i++) { 
            $combined[$keys[$i]] = $values[$i]; 
        } 
        return $combined; 
    } 
}  

--Hiperjp 11 Sep 2004

Este artículo es parte de las FAQs de PHP y el Manual de PHP.

Herramientas personales