PHP“年”数组

新手上路,请多包涵

我正在尝试创建一个多年的数组,我将在我正在构建的表格的 DOB 年中使用它。目前,我知道有两种方法可以处理这个问题,但我真的不关心其中任何一种:

1)范围:

我知道我可以使用以下方法创建一个年份数组

<?php
     $year = range(1910,date("Y"));
     $_SESSION['years_arr'] = $year;
?>

第 1 点的问题有两个方面:a) 我的函数调用将第一年显示为“已选择”而不是“年份”,因为我有选项 =“0”,以及 b) 我希望年份倒转,所以 2010 年是第一个至少并显示减少。

我的函数调用是:

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) 长数组

我知道我可以实际创建一个列出年份的数组,但如果我想返回并修改,这会占用大量空间和时间。

例如: 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;

有没有人推荐如何工作的想法 - 或者只是如何简单地修改我现有的代码?

谢谢!

原文由 JM4 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 343
2 个回答

不确定为什么为此使用会话,但可以使用 array_combine 函数生成数组。

 $years = array_combine(range(date("Y"), 1910), range(date("Y"), 1910));

将参数反转为 范围 将为您提供一个降序数组,array_combine 将使用第一个数组作为键,第二个数组作为值,给出 array(1910 => 1910, ...); 映射你之后。

原文由 Brenton Alker 发布,翻译遵循 CC BY-SA 3.0 许可协议

反转范围内的数字以降序排列年份

$years = range(2010, 1900); // => [2010, 2009, 2008, ... ]

使用 date(‘Y’) 而不是硬编码当前年份

$years = range(date('Y'), 1900);

在开头附加一个选项“选择年份”

 array_unshift($years, "Select year");

最后,为什么要有一个选择年份或出生日期的下拉菜单?它可能很普遍,但它非常烦人。一个带有验证的简单文本框,比如 dd/mm/yyyymm/dd/yyyy 更好。仅包含日期、月份和年份的下拉列表意味着允许用户选择有效值,如果他们发现仅输入日期很费解,则不一定是正确的值。此外,由于用户仍然可以通过修改 DOM 输入垃圾值,因此需要在服务器端进行验证。如果验证是在服务器端完成的,不妨只为他们提供一个简单的文本框。

下拉菜单也使客户端编码变得复杂。例如,如果选择了二月和闰年,则天数下拉列表应包含 29 天,否则为 28 天。

原文由 Anurag 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏