是否可以选择要在foreach语句中使用的数组无法弄清楚:/
我的代码:
<?php
$selmon = $_GET['m'];
$selectmon = ('$' . $months[$selmon-1]);
foreach ($selectmon as $day){
if ($day % 7 == 0){
echo ("<td>" . $day . "</td>");
echo ("</tr>");
echo ("<tr>");
}else{
echo ("<td>" . $day . "</td>");
}}
?>
我的数组基本上包含一个月中所有日期的列表,例如。
$september = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30);
我是以错误的方式解决这个问题还是甚至可能?
此外,我还有一系列月份名称:
$months = array("january", "february", "march", "april", "may", "june", "july", "august", "september", "october", "november", "december");
如果我使用
echo $selectmon;
如果我使用localhost / index.php?m = 1则返回
$january
答案 0 :(得分:4)
你很亲密。您需要执行${$months[$selmon-1]}
,这称为动态访问变量:
<?php
$selmon = $_GET['m'];
$selectmon = ${$months[$selmon-1]};
foreach ($selectmon as $day){
if ($day % 7 == 0){
echo ("<td>" . $day . "</td>");
echo ("</tr>");
echo ("<tr>");
}else{
echo ("<td>" . $day . "</td>");
}
}
?>
另外,它被认为不是以这种方式访问变量的最佳实践。考虑如果您有不同的情况会发生什么:echo ${$_GET['v']}
。现在,如果用户转到webpage.php?v=MYSQL_PASSWORD
,则代码会显示为echo $MYSQL_PASSWORD
。我相信你可以想象这种技术在某些情况下如何揭示安全风险。您使用动态变量的方式不会遇到此问题,因为在最糟糕的情况下($months[#]
为null
),您只暴露$null
并不重要。
答案 1 :(得分:2)
我建议您查看date() function。这比使用月份列表硬编码要容易得多,而且您的代码也会更加清晰。像这样:
for($day = 1; $day < $numDays + 1; $day++)
{
echo "<td>$day</td>";
if ($day % 7 == 0)
{
echo "</tr><tr>";
}
}
将始终显示所选月份的天数。然后你可以写一些像
这样的东西soainfra_metrics{metric_group="sca_composite",partition="test",is_active="true",state="on",is_default="true",composite="test123"} map:stats version:1.0
soainfra_metrics{metric_group="sca_composite",partition="gello",is_active="true",state="on",is_default="true",composite="test234"} map:stats version:1.8
soainfra_metrics{metric_group="sca_composite",partition="bolo",is_active="true",state="on",is_default="true",composite="3415"} map:stats version:3.1
soainfra_metrics{metric_group="sca_composite",partition="solo",is_active="true",state="on",is_default="true",composite="hji"} map:stats version:1.1
您还可以显示月份名称,星期几或处理闰年,所有这些都不需要数组!