在foreach()中使用Variable作为数组名称PHP

时间:2017-04-29 20:50:46

标签: php arrays foreach

我一直在制作一个时钟,根据它的日期显示时间表,所以我创建了7个带有时间表的数组。现在我需要编写一个带有日期的foreach语句:

 $day = date("D");

然后在该数组上使用foreach函数,如:

 foreach ($day as &$value) {
 }

当我这样做虽然它给了我一个错误,因为它要我使用直接数组变量。

  

警告:第24行/home/johfin16/johnfinberg.com/php/functions-new.php中为foreach()提供的参数无效

以下是我的一个阵列的示例。

 $Mon = array("08:10am-08:30am-Morning Meeting",
              "08:35am-09:55am-A Block", 
              "10:05am-11:25am-B Block",
              "11:30am-12:05pm-First Lunch",
              "12:05pm-12:40pm-Second Lunch", 
              "12:40pm-02:00pm-C Block", 
              "02:05pm-03:25pm-D Block");

有没有办法解决这个问题而不创建一堆if语句?

3 个答案:

答案 0 :(得分:1)

您似乎正在尝试使用variable variables。所以它应该是:

$day = &${date('D');
foreach ($day as &$value) {
    ...
}

然而,变量变量通常是糟糕的编程习惯。每当你发现自己需要它们时,它就表明你应该使用关联数组而不是单独的变量。所以你的代码应该是:

$calendar = array(
    'Mon' => array("08:10am-08:30am-Morning Meeting","08:35am-09:55am-A Block", "10:05am-11:25am-B Block", "11:30am-12:05pm-First Lunch", "12:05pm-12:40pm-Second Lunch", "12:40pm-02:00pm-C Block", "02:05pm-03:25pm-D Block"),
    'Tue' => array(...),
    ...
);

然后你可以这样做:

$day = &$calendar[date('D')];
foreach ($day as &$value) {
    ...
}

答案 1 :(得分:0)

switch函数可用于将一个数组设置为$ active,然后该数组可用于foreach函数。例如:

switch ($day) {
case "Mon":
    $active = $Mon;
    break;
case "Tue":
    $active = $Tue;
    break;
case "Wed":
    $active = $Wed;
    break;
default:
    $active = $Special;
}

答案 2 :(得分:0)

  

每天都有多个类需要从数组中提取。

因为你有:

$day = date("D");

因此,在达到此行之前所包含的$day,忘记了类,数组,变量等,$day突然只变为{{1}的结果}}

您可能希望将date("D")添加为数组元素(即数组中的众多项之一),因此您可以这样做:

date("D")

这会将$day[] = date("D"); 值添加到多个date("D")的数组中,然后可以使用$days循环循环。每一天。