2012-05-24 49 views
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; 
} 

>

回答

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 
*/ 
+0

謝謝!變量變量正是我所需要的。 – jdublu

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相同。

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); 
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