根据if条件在foreach语句中使用数组

时间:2015-11-18 23:40:07

标签: php

是否可以选择要在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 

2 个答案:

答案 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

您还可以显示月份名称,星期几或处理闰年,所有这些都不需要数组!