php - remove - tags wordpress codex
PHP ''Years'' array (10)
Estoy tratando de crear una matriz por años que usaré en la parte del año de DOB de un formulario que estoy construyendo. Actualmente, sé que hay dos formas de manejar el problema, pero a mi tampoco me importa:
1) Rango:
Sé que puedo crear una matriz de años usando lo siguiente
<?php
$year = range(1910,date("Y"));
$_SESSION[''years_arr''] = $year;
?>
el problema con el Punto 1 es doble: a) mi llamada de función muestra el primer año como ''seleccionado'' en lugar de "Año" como tengo como opción = "0", yb) quiero que se inviertan los años para que 2010 sea el primero En el menor y mostrado decreciente.
Mi llamada de función es:
PHP
<?php
function showOptionsDrop($array, $active, $echo=true){
$string = '''';
foreach($array as $k => $v){
$s = ($active == $k)? '' selected="selected"'' : '''';
$string .= ''<option value="''.$k.''"''.$s.''>''.$v.''</option>''."/n";
}
if($echo) echo $string;
else return $string;
}
?>
HTML
<table>
<tr>
<td>State:</td>
<td><select name="F1State"><option value="0">Choose a year</option><?php showOptionsDrop($_SESSION[''years_arr''], null, true); ?></select>
</td>
</tr>
</table>
2) Array largo
Sé que puedo crear físicamente una matriz con años enumerados, pero esto ocupa mucho espacio y tiempo si alguna vez quiero volver y modificar.
ej: PHP
$years = array(''1900''=>"1900", ''1901''=>"1901", ''1902''=>"1902", ''1903''=>"1903", ''1904''=>"1904", ''1905''=>"1905", ''1906''=>"1906", ''1907''=>"1907", ''1908''=>"1908", ''1909''=>"1909", ''1910''=>"1910", ''1911''=>"1911", ''1912''=>"1912", ''1913''=>"1913", ''1914''=>"1914", ''1915''=>"1915", ''1916''=>"1916", ''1917''=>"1917", ''1918''=>"1918", ''1919''=>"1919", ''1920''=>"1920", ''1921''=>"1921", ''1922''=>"1922", ''1923''=>"1923", ''1924''=>"1924", ''1925''=>"1925", ''1926''=>"1926", ''1927''=>"1927", ''1928''=>"1928", ''1929''=>"1929", ''1930''=>"1930", ''1931''=>"1931", ''1932''=>"1932", ''1933''=>"1933", ''1934''=>"1934", ''1935''=>"1935", ''1936''=>"1936", ''1937''=>"1937", ''1938''=>"1938", ''1939''=>"1939", ''1940''=>"1940", ''1941''=>"1941", ''1942''=>"1942", ''1943''=>"1943", ''1944''=>"1944", ''1945''=>"1945", ''1946''=>"1946", ''1947''=>"1947", ''1948''=>"1948", ''1949''=>"1949", ''1950''=>"1950", ''1951''=>"1951", ''1952''=>"1952", ''1953''=>"1953", ''1954''=>"1954", ''1955''=>"1955", ''1956''=>"1956", ''1957''=>"1957", ''1958''=>"1958", ''1959''=>"1959", ''1960''=>"1960", ''1961''=>"1961", ''1962''=>"1962", ''1963''=>"1963", ''1964''=>"1964", ''1965''=>"1965", ''1966''=>"1966", ''1967''=>"1967", ''1968''=>"1968", ''1969''=>"1969", ''1970''=>"1970", ''1971''=>"1971", ''1972''=>"1972", ''1973''=>"1973", ''1974''=>"1974", ''1975''=>"1975", ''1976''=>"1976", ''1977''=>"1977", ''1978''=>"1978", ''1979''=>"1979", ''1980''=>"1980", ''1981''=>"1981", ''1982''=>"1982", ''1983''=>"1983", ''1984''=>"1984", ''1985''=>"1985", ''1986''=>"1986", ''1987''=>"1987", ''1988''=>"1988", ''1989''=>"1989", ''1990''=>"1990", ''1991''=>"1991", ''1992''=>"1992", ''1993''=>"1993", ''1994''=>"1994", ''1995''=>"1995", ''1996''=>"1996", ''1997''=>"1997", ''1998''=>"1998", ''1999''=>"1999", ''2000''=>"2000", ''2001''=>"2001", ''2002''=>"2002", ''2003''=>"2003", ''2004''=>"2004", ''2005''=>"2005", ''2006''=>"2006", ''2007''=>"2007", ''2008''=>"2008", ''2009''=>"2009", ''2010''=>"2010");
$_SESSION[''years_arr''] = $years_arr;
¿Alguien tiene una idea recomendada sobre cómo trabajar o simplemente cómo modificar mi código existente?
¡Gracias!
¿Por qué necesitas almacenar la matriz en la sesión?
En función de su caso de uso, no necesita utilizar la matriz para almacenar datos de antemano.
define(''DOB_YEAR_START'', 1900);
$current_year = date(''Y'');
for ($count = $current_year; $count >= DOB_YEAR_START; $count--)
{
print "<option value=''{$count}''>{$count}</option>";
}
¿Por qué no haces esto en tu primer acercamiento?
foreach($array as $k){
$string .= ''<option value="''.$k.''">''.$k.''</option>''."/n";
}
Hablando semánticamente, y funcionalmente, es mejor usar el año como value
que como int
.
Además, use el método drawnonward para obtener una matriz invertida, de modo que el año 2010 sea el primer valor predeterminado de su lista.
Ampliando la respuesta de Brenton Alker; Si necesita agregar algo al inicio de la matriz, podría hacer algo como esto:
$keys = array_merge([''any''], range(date("Y"), 1910));
$values = array_merge([''Any''], range(date("Y"), 1910));
$choice = array_combine($keys, $values);
Esto agregará la clave / valor de cualquiera / Cualquiera al inicio de la matriz mientras mantiene todas las claves subsiguientes en su lugar
En la opción 1 agregue:
$year = array_reverse( $year );
o simplemente use:
$year = range( date("Y") , 1910 );
No estoy seguro de por qué está utilizando la sesión para esto, pero la generación de la matriz se puede hacer con la función array_combine .
$years = array_combine(range(date("Y"), 1910), range(date("Y"), 1910));
Si invierte los parámetros en range , obtendrá una matriz descendente y array_combine usará la primera matriz como las claves y la segunda como los valores, dando la array(1910 => 1910, ...);
mapa que buscas
Si solo invertir el orden de la matriz de años es el objetivo, puede usar la función array_reverse()
.
Yo iría con la opción # 1. Sin embargo, todo lo que necesita hacer es anteponer un valor a la matriz antes de imprimirlo:
<?php
$years = $_SESSION[''years_arr''];
// reverse the year list
rsort($years);
// prepend the ''choose a year'' value to the array
array_unshift($years, ''Choose a year'');
?>
<td><select name="F1State"><?php showOptionsDrop($years, null, true); ?></select>
invierta los números en el rango para obtener años en orden descendente
$years = range(2010, 1900); // => [2010, 2009, 2008, ... ]
use la fecha (''Y'') en lugar de codificar el año en curso
$years = range(date(''Y''), 1900);
anexar una opción "Seleccionar año" al principio
array_unshift($years, "Select year");
Y, finalmente, ¿por qué tener un menú desplegable para el año o la fecha de nacimiento? Puede ser frecuente pero es muy irritante. Un simple cuadro de texto con validaciones, algo como dd / mm / aaaa o mm / dd / aaaa es mucho mejor. Tener menús desplegables para la fecha, el mes y el año solo significa que un usuario puede seleccionar valores válidos y no necesariamente corregirlos si los encuentra complicados solo para ingresar una fecha. Además, dado que los usuarios aún pueden ingresar valores no deseados modificando el DOM, las validaciones deben realizarse en el lado del servidor. Si las validaciones se realizan en el lado del servidor, también podría ofrecerles un simple cuadro de texto.
También los menús desplegables hacen que la codificación del lado del cliente sea compleja. Por ejemplo, si se seleccionan febrero y un año bisiesto, entonces un menú desplegable de días debe contener 29 días, de lo contrario 28.
parte 2:
$years = array();
for($i = 1900;$i<= 2010;$i++)
$years["$i"] = $i;
simplemente puedes usar la función PHP foreach ()!
ejemplo:
$years_now = date("Y");
echo ''<select name="y">'';
echo ''<option value="" disabled>Now:</option>'';
echo ''<option value="''.$years_now.''" selected="selected">''.$years_now.''</option>'';
echo ''<option value="" disabled>Other:</option>'';
foreach (range($years_now, 1910) as $years) {
echo ''<option value="''.$years.''">''.$years.''</option>'';
}
echo ''</select>'';