【问题标题】:how can i use for loop scope variable form outside for loop?我如何在 for 循环外使用 for 循环范围变量形式?
【发布时间】: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。我会试试你的建议。

标签: php mysql


【解决方案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]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 2020-04-05
  • 2011-05-27
  • 1970-01-01
  • 1970-01-01
  • 2020-01-19
相关资源
最近更新 更多