如何在PHP中使用数组名中的变量?(变量数组/变量变量?)


How do I use a variable in an array name in PHP? (variable arrays/variable variable?)

我看过其他问题/答案,但我不完全理解它。而且,我还没有找到一个人问我确切的问题。

我有7个数组存储业务的开始和结束时间。我的PHP程序检查当前日期,并将其与当天的开始结束时间进行匹配。现在我有7个类似的if语句:

if (date(l) == 'Sunday') {
   $start = $SundayAccountingHours['start'];
   $end = $SundayAccountingHours['end'];
 }

我想做的是清理代码。所以我可以输入

$start = ${$today}.AccountingHours['start'];
$end = ${$today}.AccountingHours['end'];

我怎样才能使它工作?使用上面的例子,我得到这个:解析错误:语法错误,意外的'['在C:'xampp'htdocs'Dev.php第22行,其中第22行是$start被定义。我不能去掉括号里的东西因为那是我真正需要的信息。

如果你不能告诉,我仍然是PHP新手,所以任何帮助将是感激的。

谢谢!

if (date(l) == 'Sunday') {
   $start = $SundayAccountingHours['start'];
   $end = $SundayAccountingHours['end'];
 }

首先,在'l'周围加上引号。它正在寻找一个名为l的常量,并没有发现它将其视为字符串。这是非常糟糕的做法(应该发出警告)。

其次,使用多维数组。您不需要尝试使用星期几作为变量名的一部分。例如,

$start = $AccountingHours[$today]['start'];

你可能会发现变量变量可以让你做你想做的事情,但我强烈建议你避开它们。我不认为它们有一个单一的实际应用,它们只会引起混乱和错误(咳嗽)。

如果你必须使用变量名(你真的应该使用多维数组),试着这样做:

$start = ${$today.'AccountingHours'}['start'];

数组元素可以被变量引用,如下所示:

$myArray[$myVar]

数组也可以包含其他数组,如:

$myArray = array();
$myArray['a'] = array();
$myArray['a']['b'] = 'foo';
print $myArray['a']['b'];  // prints 'foo'

所以结合这两个概念,你可以创建一个多维数组由变量引用:

$accountingHours = array();
$accountingHours['Sunday'] = array('start' => ..., 'end' => ...);
// ...
$start = $accountingHours[$today]['start'];