如何在循环中使用循环范围变量形式?

时间:2014-06-15 14:31:41

标签: php mysql

我遇到有关以下代码的问题。

<?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。

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

2 个答案:

答案 0 :(得分:0)

可能的变量$ 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'];
?> 

答案 1 :(得分:0)

您的代码存在的问题是$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"];  
 }

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