【问题标题】:How do I use a variable in an array name in PHP? (variable arrays/variable variable?)如何在 PHP 中的数组名称中使用变量? (变量数组/变量?)
【发布时间】:2013-05-16 23:07:48
【问题描述】:

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

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

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

我想做的是清理代码。所以也许我可以有类似的东西

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

我怎样才能做到这一点?使用上面的例子我得到这个:Parse error: syntax error, unexpected '[' in C:\xampp\htdocs\Dev.php on line 22 其中第 22 行是 $start 被定义。我不能把括号里的东西拿出来,因为那是我真正需要得到的信息。

如果您不知道,我还是 PHP 新手,因此我们将不胜感激。

谢谢!

【问题讨论】:

  • php 中的. 不是属性运算符,而是串联运算符。

标签: php arrays variables


【解决方案1】:
if (date(l) == 'Sunday') {
   $start = $SundayAccountingHours['start'];
   $end = $SundayAccountingHours['end'];
 }

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

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

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

您可能会在以后发现变量变量,这些变量允许您执行您正在尝试的事情,但我强烈建议您避开它们。我认为它们没有单一的实际应用,它们只会导致混乱和错误 (cough)。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      如果您必须使用变量变量名(尽管您真的应该使用多维数组),请尝试这样的方法。

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

      【讨论】:

      • 这是一个解决表面问题的案例,而不是实际问题。
      • 完全同意。这就是我写第一行的原因。 :)
      • 然后我会尝试围绕多维数组展开思考。当我使用您的代码回显 $start 时,什么都没有显示。好像变量是空的...
      • 尝试var_dump($SundayAccountingHours) 看看是否正在生成变量。这实际上是使用可变变量的主要问题之一。代码变得非常难以调试。
      • 我同意多维数组将是这个问题的正确答案。但是,我将此标记为已接受的答案,因为它实际上回答了我提出的问题。不过,我不会在我的程序的最终版本中使用这种方法。
      猜你喜欢
      • 2012-06-13
      • 1970-01-01
      • 2015-12-29
      • 2014-03-17
      • 1970-01-01
      • 2021-10-22
      • 2019-09-08
      • 1970-01-01
      • 2011-06-25
      相关资源
      最近更新 更多