0

私が制御できないシリアル化されたフォームからデータを受け取るページがあります。データは、値のリスト (Exam_Questions) と、質問に対する回答である各質問のパラメーター (Sort_Order_1) で構成されます。

パラメータ [exam_questions] 内に順番に格納された任意の数の問題が存在する可能性があり、次に問題ごとに「Sort_Order_[番号]」が格納されます。「_[番号]」は、Exam_Questions 内の問題の順序に関連します。つまり、101 は 1、102 は 2、103 は 3 です。「Sort_Order_[番号]」パラメータには、さまざまなタイプのデータと、場合によっては配列を含めることができます。

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

可変変数を使用してそれを行うこともできますが、コードでは、既存の変数を上書きし、制御できない変数で名前空間を汚染するリスクがあります。

に 2 番目のパラメーターを追加して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 に答える
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 に答える