【问题标题】:Declaring a variable dynamically in PHP在 PHP 中动态声明变量
【发布时间】:2016-11-11 13:30:33
【问题描述】:

我需要以下格式的一些变量:

$m_01;
$m_02;
$m_03;
.....
.....
.....
$m_12;

变量中的数字是日历的月份。 我可以分别声明 12 个变量。但是,我想使用循环声明变量。所以我做了这样的事情。

for($i = 1; $i <= 12; $i++) {
    if($i<10)
        $month = '0'.$i;
    else
        $month = $i;
    $m_$i;
}

但是,我遇到了一些错误:-

解析错误:语法错误,第 412 行 /var/www/html/custom/ci/Dotell_customer/application/controllers/login.php 中的意外“$month”(T_VARIABLE)

我该如何解决这个问题?

注意:

$$month creates a variable 01;

有什么办法可以让变量m_01 洞穴化?

附注我知道数组。我只是想学PHP变量变量。

【问题讨论】:

  • 你要找的是一个“数组”。
  • 你也可以试试variable variables
  • 虽然@David 是对的,但您可以(但不应该)使用 ${'m_'.$i};`
  • @Saswat,你能评论大卫关于你为什么不使用数组的问题吗?是想了解 PHP variables 还是您不只是了解 PHP 数组?

标签: php variables


【解决方案1】:

这不是最好的做法,但仍然只是为了答案:

for($i = 0; $i <= 12; $i++) {
     ${"m_$i"} = $i;
}

echo $m_1;
echo $m_2;
echo $m_3;

最好的做法是创建一个数组。例如:

$arr = [];
for( $i=0; $i <=12; $i++ ) {
    $arr['m_'.$i] = $i;
}

print_r($arr);

【讨论】:

  • 当它不是最好的时候你为什么建议它?
  • 变量变量的用途。我不确定 OP 是否只是将其作为示例来看看如何做到这一点。
  • 因为它提供了对 php 细微差别的洞察力,同时是给定问题的功能性解决方案。
【解决方案2】:

我认为您正在寻找类似的东西

$varname = 'm_'.$i; // format the way you need it

$$varname = ...

正如 cmets 中所指出的,这是一种代码味道,而且通常是不必要的。通常,数组做得更好,即

$m[$i] = ...

【讨论】:

    【解决方案3】:

    使用 PHP 变量变量。这也符合 cmets 中的建议

    ${"m_$i"}
    

    【讨论】:

      【解决方案4】:

      Davids 建议使用数组。

      $month = [];
      
      for($i = 1; $i <= 12; $i++)
      {
          if($i<10)
              $month[] = '0'.$i;
          else
              $month[] = $i;
          $month[$i];
      }
      

      这里 $var[] = ... 语法会附加您的数组。 $month[$i] 访问它。

      【讨论】:

        【解决方案5】:

        通常不建议使用双变量。你真的应该使用数组来解决你的问题:

        $month = array();
        for($i = 1; $i <= 12; $i++)
        {
            if($i<10)
                $month['m_0'.$i] = $i;
            else
                $month['m_'.$i] = $i;
        }
        

        否则,如果你真的想要双变量,那么:

        for($i = 1; $i <= 12; $i++)
        {
            if($i<10)
                ${"m_0$i"} = $i;
            else
                ${"m_$i"} = $i;
        }
        

        希望对你有帮助

        【讨论】:

          【解决方案6】:
          for($i = 1; $i <= 12; $i++){
              if($i<10)
                  $month = '0'.$i;
              else
                  $month = $i;
          
               $month = 'm_' . $month;
               ..........
          }
          

          访问变量为

          分配 $month = 'm_12';

          $$month

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-12-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-12-31
            • 1970-01-01
            • 1970-01-01
            • 2017-03-16
            相关资源
            最近更新 更多