我如何在 for 循环外使用 for 循环范围变量形式?

Posted

技术标签:

【中文标题】我如何在 for 循环外使用 for 循环范围变量形式?【英文标题】:how can i use for loop scope variable form outside for loop? 【发布时间】:2014-08-05 12:08:39 【问题描述】:

我遇到以下代码的问题。

<?php 
$sql="SELECT * FROM `question` WHERE sub_id=$subject_id";
$query=mysql_query($sql);
$question_count=mysql_num_rows($query);
for($a=1;$a<=$question_count;$a++)
    $ans$a=$_POST["ans$a"];
    $subject_id$a=$_POST["sub_id$a"];
    $group_id$a=$_POST["grup_id$a"];  


?>

我想在 for 循环之外使用 $ans$a$subject_id$a$subject_id$a 等变量。如果我使用类似下面的代码,

<?php 
$sql="SELECT * FROM `question` WHERE sub_id=$subject_id";
$query=mysql_query($sql);
$question_count=mysql_num_rows($query);
for($a=1;$a<=$question_count;$a++)
    $ans$a=$_POST["ans$a"];
    $subject_id$a=$_POST["sub_id$a"];
    $group_id$a=$_POST["grup_id$a"];


    echo $ans1;
    echo $subject_id1;
?>  

php 说:

注意:未定义变量:第 25 行 F:\xampp\htdocs\oes\Student\result_process.php 中的 ans1。

请帮我提供一些建议,以便在循环范围之外使用这些变量。

【问题讨论】:

我没有使用过这样的结构,因为我认为使用它们是不好的做法。但不应该是$"ans".$a 而不是$ans$a 在你的循环中,你的意思是写:$'ans' . $a?也就是说动态创建一个变量,比如$ans1? 是的,我想要它。这是变量动态创建$ans1。我会试试你的建议。 【参考方案1】:

您的代码的问题是$ans$a 等于$ans[$a] (PHP curly braces in array notation)

所以你的循环是这样做的:

 for($a=1;$a<=$question_count;$a++)
     $ans[$a]=$_POST["ans$a"];
     $subject_id[$a]=$_POST["sub_id$a"];
     $group_id[$a]=$_POST["grup_id$a"];  
 

这就是为什么没有定义$ans1。如果你写echo $ans[1],你会得到结果。

如果你真的想要一个名为 $ans1 的变量,你需要这样写:

 for( $a = 1 ; $a <= $question_count ; $a++ )
     $"ans" . $a = $_POST["ans$a"];
     $"subject_id" . $a = $_POST["sub_id$a"];
     $"group_id" . $a = $_POST["grup_id$a"];  
 

但正如我在评论中所写,我认为应该避免这种编写代码的方式。

【讨论】:

抱歉,这段代码也出现了同样的问题。现在还说。注意:未定义的变量:第 65 行 F:\xampp\htdocs\oes\Student\result_process.php 中的 ans3 我想使用 ans3 变量。如果我使用这样的变量 $"ans" ,它会起作用。 $a 而不是 $ans[$a] @Sifat080 如果您可以访问$ans1,但$ans3 将导致Notice: Undefined variable: ans3,则$question_count 小于3。你想对it work if i use such like this variable $"ans" . $a instead of $ans[$a] 说什么?【参考方案2】:

可能的变量 $question_count 可以为 0。 否则尝试使用数组:

<?php 
$sql="SELECT * FROM `question` WHERE sub_id=$subject_id";
$query=mysql_query($sql);
$question_count=mysql_num_rows($query);
$items = array();

for($a=1;$a<=$question_count;$a++)
    $items[$a] = array(
       'ans' => $_POST["ans$a"],
       'subject_id' => $_POST["sub_id$a"],
       'group_id' => $_POST["grup_id$a"]
    );


echo $items[1]['ans'];
echo $items[1]['subject_id'];
?> 

【讨论】:

即使 $question_count 永远不会是 0$ans1 也永远不会使用 OP 给出的代码设置,因为 $ans$a 等于 $ans[$a]

以上是关于我如何在 for 循环外使用 for 循环范围变量形式?的主要内容,如果未能解决你的问题,请参考以下文章

js 如何保存循环内的变量,然后循环外使用这个变量?

如何访问for循环外的值

在 Laravel 中的 for 循环外访问变量

Shell的双重循环

使用带有两个变量的 for 循环

jQuery - 使用“for-each”循环更改循环外的变量