PHP:使用动态变量创建for循环

时间:2014-04-08 09:03:51

标签: php arrays for-loop

我试图减少代码:

我想在这部分中制作一个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});
    }

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

这也有效!

答案 2 :(得分:0)

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作为输出。如果您的代码无法重新考虑使用数组,我会非常惊讶,这会使您的代码更简单,更不令人惊讶且更易于维护。