0

そのため、MySQLからJSONにエンコードしようとしていますが、[pagenumber] [id、type、description] [answerid、answerdescription]形式で必要です。これの目標は、マルチステップポーリングを生成するjavascriptファイルのデータを読み取ることです。

ここで、どのように表示するかについて擬似コードを描画してみます。

{"pages":
  [{1:
    [{"id":1,"text":"U mad?","options":
      [{"opt_id":1,"option":"yes","answer:''"},
       {"opt_id":2,"option":"no","answer:''"},
       {"opt_id":3,"option":"perhaps","answer:''"}]},
       {"id":2,"text":"Got it?","options":
    [{"opt_id":1,"option":"yes","answer:''"},
       {"opt_id":2,"option":"no","answer:''"}]
    }]
   },
   {2:
    [{"id":3,"text":"Help me?","options":
     [{"opt_id":1,"option":"yes","answer:''"},
       {"opt_id":2,"option":"no","answer:''"},
       {"opt_id":3,"option":"perhaps","answer:''"}]},
     {"id":4,"text":"Please?","options":
      [{"opt_id":1,"option":"yes","answer:''"},
       {"opt_id":2,"option":"no","answer:''"}]
    }]
  }]
}   

これは私がこれまでに得たものですが、これに3番目の「次元」を追加する方法を考えることができないようです。[id =>(int)、description =>(string)]の配列を添付する必要があります各質問に。そして、各質問には、それらに関連するいくつかの回答のための余地が必要です。Answers / Options配列の最後の列はテキスト文字列用です(ほとんどの回答はID番号で回答されますが、一部は文字列全体を必要とするテキストエリアです)。おそらくシリアル化することでフォームの結果を送り返すことができるので、これは必要ないかもしれません。

$rows = array();

while($r = mysql_fetch_assoc($sth)) 
{
    $Qid = $r['id']; 
    $page=$r['page']; 
    $type=$r['type']; 
    $Qdesc=$r['description'];

    $rows[$page][] = array(
                    'id' => $Qid,
                    'type' => $type,
                    'description' => $Qdesc);
}

この結果は次のとおりです(最初の3ページ)。

{
"1":[
  {"id":"2","type":"1","description":"U mad?"},
  {"id":"3","type":"1","description":"Got it?"},
  {"id":"4","type":"1","description":"Help me?"}],
"2":[
  {"id":"5","type":"1","description":"Please?"},
  {"id":"6","type":"1","description":"Any clues?"}],
"3":[
  {"id":"7","type":"2","description":"Foobar?"}]}
4

2 に答える 2

1

これは完全な答えではありませんが、始めるのに役立つように、次のようにすることができます。

json_encode(array("pages" => array(1 => $row1, 2=>$row2)));

array(..)通常、別の内でを使用してマルチレベルのネストを実現できますarray(..)。好き:

json_encode(
    array(
        $item1,
        $item2,
        array(
            "key1" => array(
                    1,
                    2,
                    array(
                        "inKey1" => array(4,5,6)
                    )
            )
        )
    )
);
于 2012-07-16T12:32:37.540 に答える
1

オプションテーブルはどうですか?

id, option, answer
1, yes, ''
2, no, ''
3, perhaps, ''

(回答データは常に空なので、一貫性を保つために含めました)

次に、質問ごとに、すべてのオプション「1,2」に対して「1,2,3」のオプションフィールドがあり、「はい/いいえ」などのオプションがあります。

これを実装するには、次のことができます。-

$options=array();
if(!empty($r['options']))
{
    $sql="SELECT * FROM options_table WHERE id IN (".$r['options'].")";
    $result=mysql_query($sql);
    while($row=mysql_fetch_assoc($result){
       $options[]=$row;
    }
}

$rows[$page][] = array(
                'id' => $Qid,
                'type' => $type,
                'description' => $Qdesc,
                'options'=>$options);

このようにして、ハートのコンテンツにオプションを追加できます

于 2012-07-16T12:34:06.730 に答える