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

时间:2013-05-22 02:37:54

标签: php arrays variables

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

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

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

我想要做的是清理代码。所以也许我可能有像

这样的东西
$start = ${$today}.AccountingHours['start'];
$end = ${$today}.AccountingHours['end'];

我该如何使这项工作?使用上面的例子,我得到了这个:解析错误:语法错误,第22行的C:\ xampp \ htdocs \ Dev.php中的意外'[',其中第22行是$ start。我无法取出括号中的内容,因为这是我需要的信息。

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

谢谢!

3 个答案:

答案 0 :(得分:5)

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

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

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

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

你可能会发现变量变量,这可以让你做一些像你正在尝试的事情,但我强烈建议你避开它们。我不认为它们只有一个实际的应用程序,它们只会引起混淆和错误(cough)。

答案 1 :(得分:1)

如果你必须使用变量变量名称(你应该真的去寻找多维数组),试试这样的事情。

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

答案 2 :(得分:0)

数组元素可以通过如下变量引用:

$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'];