0

我有一个页面正在从我无法控制的序列化表单接收数据,数据由值列表(Exam_Questions)和每个问题的参数组成,该参数是问题的答案(Sort_Order_1)。

可以有任意数量的问题按顺序存储在参数 [exam_questions] 中,然后每个问题都有一个“Sort_Order_[number]”。“_[number]”与 Exam_Questions 中问题的顺序有关,即 101 是 1,102 是 2,103 是 3。“Sort_Order_[number]”参数可以包含不同类型的数据,有时还包含一个数组。

我已将 Exam_Questions 分解为一个具有计数器的数组,我想要做的是遍历数组,然后请求将为问题提交的答案值。

例如,当我遍历第一个问题的exam_questions 时,我希望能够提取问题2 的Sort_Order_1,我希望能够提取Sort_order_2 等等。

我在数组中有“$Question_Number”值,但我一直无法找到能够请求以下内容的方法:

价值 = $Sort_Order_ 。$Question_Number

这是我到目前为止尝试过的代码,它将提取问题,但我无法弄清楚如何请求“Sort_Order_[number]”值。下面的示例是我收到的字符串的缩减版本,因为还有其他提交的字段。

<?php

//parse_str($_POST['Form_Values']);

parse_str('Exam_Questions=101,102,103&Sort_Order_1=TEST1&Sort_Order_2=TEST2&  Sort_Order_3=TEST3');

$Exam_Question = (explode(",",$Exam_Questions));

$Question_Number = 1;

foreach ($Exam_Question as $QID) 
{ 

echo $Question_Number . ' - ' . $QID . '<br / >';

$Sort = eval('$Sort_Order_' . $Question_Number);

echo $Sort . '<br />';

$Question_Number =  (int)$Question_Number + 1;
}

?>

4

4 回答 4

0

我认为您正在寻找可变变量

<?php
parse_str('Exam_Questions=101,102,103&Sort_Order_1=TEST1&Sort_Order_2=TEST2&  Sort_Order_3=TEST3');

$questions = explode( ',', $Exam_Questions );

for( $i = 0; $i < count( $questions ); $i++ ) {
    $answerVarName = 'Sort_Order_'.( $i + 1 );
    // notice the double $$ \
    echo $questions[$i].': '.$$answerVarName."\n";
}

/*
101: TEST1
102: TEST2
103: TEST3
*/
于 2012-05-24T15:20:48.003 回答
0

只需修改您的代码以使用如下变量:

parse_str('Exam_Questions=101,102,103&Sort_Order_1=TEST1&Sort_Order_2=TEST2&  Sort_Order_3=TEST3');

$Exam_Question = (explode(",",$Exam_Questions));

$Question_Number = 1;

foreach ($Exam_Question as $QID) 
{ 

echo $Question_Number . ' - ' . $QID . '<br / >';

$Sort = ${"Sort_Order_$Question_Number"};

echo $Sort . '<br />';

$Question_Number =  (int)$Question_Number + 1;
}

注意 ${"somestring"} 将与指定 $somestring 相同。

于 2012-05-24T15:23:33.393 回答
0

尽管您可以使用可变变量来完成此操作,但您的代码存在覆盖现有变量并使用您无法控制的变量污染命名空间的风险。

您可以添加第二个参数以parse_str在数组中而不是松散变量中获取该操作的结果:

parse_str('Exam_Questions=101,102,103&Sort_Order_1=TEST1&Sort_Order_2=TEST2&  Sort_Order_3=TEST3', $array);

var_dump($array);
于 2012-05-24T15:27:51.103 回答
0
parse_str('Exam_Questions=101,102,103&Sort_Order_1=TEST1&Sort_Order_2=TEST2&  Sort_Order_3=TEST3');
$questions = explode(',', $Exam_Questions);

$i = 1;
foreach ($questions as $q)
{
    $result = 'Sort_Order_' . $i;
    echo $q . ' = ' . $$result . '<br />';
    $i++;
}

输出:

101 = TEST1
102 = TEST2
103 = TEST3
于 2012-05-24T15:28:54.903 回答