从序列化表单中提取值

时间:2012-05-24 15:08:05

标签: php

我有一个页面,它接收来自我无法控制的序列化表单的数据,数据包含一个值列表(Exam_Questions),然后是每个问题的参数,这是问题的答案(Sort_Order_1) 。

可以在参数[exam_questions]中按顺序存储任意数量的问题,然后针对每个问题存储“Sort_Order_ [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;
}

&GT;

4 个答案:

答案 0 :(得分:0)

我认为您正在寻找variable variables

<?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
*/

答案 1 :(得分: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相同。

答案 2 :(得分: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);

答案 3 :(得分: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