【问题标题】:PHP: creating a for loop with dynamic VariablesPHP:使用动态变量创建 for 循环
【发布时间】:2014-05-20 20:57:09
【问题描述】:

我正在尝试精简代码:

我想从这部分做一个 for 循环,但它不起作用。

$line1 = $frage1[0] . '|' . $frage1[1] . '|' . $frage1[2] . '|' . $frage1[3];
$line2 = $frage2[0] . '|' . $frage2[1] . '|' . $frage2[2] . '|' . $frage2[3];
$line3 = $frage3[0] . '|' . $frage3[1] . '|' . $frage3[2] . '|' . $frage3[3];
$line4 = $frage4[0] . '|' . $frage4[1] . '|' . $frage4[2] . '|' . $frage4[3];
$line5 = $frage5[0] . '|' . $frage5[1] . '|' . $frage5[2] . '|' . $frage5[3];

这是我的尝试:

for ($i=1; $i<6; $i++){
        ${line.$i} = ${frage.$i}[0] . '|' . ${frage.$i}[1] . '|' . ${frage.$i}[2] . '|' . ${frage.$i}[3];
    }

编辑: 这是可行的解决方案(就是这么简单:-p):

for ($i=1; $i<18; $i++){
        ${"line".$i} = implode("|", ${"frage".$i});
        fwrite($antworten, ${"line".$i});
    }

【问题讨论】:

  • 你的预期结果是什么
  • 应该可以了。你有什么错误?
  • 注意:使用未定义的常量行 - 在 C:\xampp\htdocs\Beispiel_Umfrage\functions.php 的第 235 行中假定为“行”

标签: php arrays for-loop


【解决方案1】:
for ($i=1; $i<6; $i++){
        $line[$i] = $frage[0] . '|' . $frage[1] . '|' . $frage$i[2] . '|' . $frage$i[3];
    }

这将在第 1 到第 6 行插入您在上面发布的相同内容。这是您要查找的内容吗?!

【讨论】:

  • OP 不想要数组
【解决方案2】:
for ($i=1; $i<6; $i++){
    ${"line$i"} = ${"frage$i"}[0] . '|' . ${"frage$i"}[1] . '|' . ${"frage$i"}[2] . '|' . ${"frage$i"}[3];
}

这也有效!

【讨论】:

    【解决方案3】:

    TL;DR

    您可能会发现variable variables 上的文档很有用,但问题在于 PHP 无法处理大括号内的未加引号的字符串。

    所以你需要${"frage$i"},而不是${frage.$i}

    另一种方法

    但是,这可能不是解决此问题的最清晰方法。试图弄清楚这段代码试图做什么,这肯定让我有点头疼。相反,我建议先将所有 $frage 添加到数组中,然后按如下方式循环:

    $lines = array();
    $frages = array($frage1, $frage2, $frage3, $frage4, $frage5)
    
    foreach($frages as $frage) {
      $lines[] = join('|', $frage);
    }
    

    请特别注意,您可以使用join 连接每个$frage,并在每个| 之间连接,而不是手动执行此连接。如果您确实只希望加入数组的前 4 个元素,则始终可以使用 [array_slice][2]

    如果您有大量 $frage 变量并且不想手动将它们添加到数组中,那么:

    $frages = array();
    
    for($i = 1; $i < x; $i++) {
      $frages[] = ${"frage$i"}
    }
    

    如果您确实需要每个 $line 变量而不是行数组,那么您可以使用 extract 尽管这会给您提供像 $line_1 这样的变量而不是 $line1

    extract($lines, EXTR_PREFIX_ALL, "line")
    

    但是,我建议您认真研究一下为什么要生成这些编号为 $frage 的内容,以及为什么需要这些编号为 $line 的输出。如果您的代码不能被重构为仅使用数组,我会感到非常惊讶,这将使您的代码更简单、更少令人惊讶且更易于维护。

    【讨论】:

    • 现在我明白了:正确的语法是:${"frage".$i}。但是你对括号内的引用是正确的
    猜你喜欢
    • 2023-04-01
    • 2019-06-14
    • 2015-12-26
    • 2011-12-08
    • 2018-02-18
    • 2012-01-21
    • 2021-04-06
    • 2013-01-04
    • 1970-01-01
    相关资源
    最近更新 更多