-1

これが可能かどうかを調べています。

PHPをミドルウェアとして使用して、複数の値の配列をサーバーに投稿しようとしています。ユーザーがアンケートに回答するモバイルアプリを持っています。1回のAPI呼び出しで、各質問の質問、回答、日付を投稿したいと思います。

値の配列をPOSTして処理することは可能ですか?回答のようなもの=[[質問、回答、日付]、[質問、回答、日付]、[質問、回答、日付]、[質問、回答、日付]]

考えやベストプラクティスがあれば、以下に投稿してください。

更新:可能であれば、例またはリンクを作成できますか?

4

6 に答える 6

2

これは、いくつかの異なる方法で行うことができます。最初の方法は、配列を投稿して次のようにアクセスすることです。

foreach($_POST['answers'] as $answer){

    $thisQuestion = $answer['question'];
    $thisAnswer =   $answer['answer'];
    $thisDate =     $answer['date'];

    // Do something with this current Question/Answer/Date combo
}

2番目の方法は、文字列を送信しjsonてPHPでデコードすることです。

$answers = json_decode($_POST['answer']);

選択する方法は、実際には、データを送信するのが最も簡単な方法になります。

于 2012-10-02T20:00:53.310 に答える
1

PHP用のこのO'ReallyArrayマニュアルを確認してください。これは、Arrayを使用したプログラミングに非常に役立ちます。

リンク

于 2012-10-02T19:58:17.307 に答える
1

最も速く/最もハッキーな方法は、各セットに番号を付けて、その方法で解析することです。つまり、実際には配列を渡すのではなく、[question0、answer0、date0]、[question1、answer1、date1]などの値を渡します。他のオプションには、各オプションの配列を渡すことが含まれます(これは可能だと思います) )、JSON(www.json.org)または配列のシリアル化を渡します。これはもう少し複雑です。うまくいけば、これら3つのうちの1つが役立つでしょう。:)

于 2012-10-02T20:00:17.317 に答える
1

うん、あなたは間違いなくこれを達成することができます。以下のコードスニペットを試してください:

<?php

if($_POST) {
    echo $_POST ['questions'][1];
    echo $_POST ['questions'][2];
    var_dump($_POST);
}

else {

?>


<form method="post">
    <input type = "text" name = "questions[2]">
    <input type = "text" name= "questions[1]">
    <input type="submit" name = "submit" value "Submit">
</form>

<?php
    }
?>

worldここで、最初のテキスト入力とhello2番目の入力で送信すると、helloworldエコーした方法として表示されます。

私が設定したことがわかるように、この配列を自分でインデックスを設定することもできます。これは$_POST配列のvar_dumpであり、より明確になります。

array(2) {
  ["questions"]=>
  array(2) {
    [2]=>
    string(5) "world" 
    [1]=>
    string(5) "hello"
  }
  ["submit"]=>
  string(0) ""
}

それがあなたの混乱を解消することを願っています。必要に応じて変更してください。ハッピーコーディングメイト:)

于 2012-10-02T20:15:18.420 に答える
0

確かに、PHPとHTMLでは、次のようなことを行います。

<?
for($i=0;$i<10;$i++) {
    echo "<input type=text name='qa[$i][question]'>";
    echo "<input type=text name='qa[$i][answer]'>";
    echo "<input type=text name='qa[$i][date]'>";
}
?>

ただし、ブラウザなしで値を投稿しようとしているように思われるため、投稿文字列を手動で作成し、PHPのcurlサポートを使用するだけです。

一般に、使用可能な値をループし、呼び出しurlencodeてPOST文字列を適切にエンコードすることにより、POST文字列を作成します。

<?
$poststr = "qa[0][question]=some+question&qa[0][answer]=some+anser&qa[0][date]=2012-10-02&qa[1][question]=another+question&qa[1][answer]=another+answer&qa[1][date]=2012-09-27";

$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $poststr);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_exec ($ch);
curl_close ($ch);
?>

次に、値を取得します(上記のいずれかの方法の場合)

<?
$answer_array = $_POST['qa'];
?>

$answer_array基本的に次のようにフォーマットされます。

$answer_array = array(
   0 => array(
      "question"=>"some question",
      "answer"=>"some answer",
      "date"=>"2012-10-02"),
   1 => array(
      "question"=>"another question",
      "answer"=>"another answer",
      "date"=>"2012-09-27")
);
于 2012-10-02T19:57:49.673 に答える
0

各フォーム要素の名前をそのような配列にします

<input type='text' name='question[]' />
<input type='text' name='answer[]' />
<input type='text name='date[]'/>

これで、これらのフォーム要素を必要な回数繰り返すことができ、各値は配列内の位置として格納されます。たとえば、5つの質問がある場合、次のように5番目の質問値にアクセスできます。

<?php 
    $questions = $_POST['question];
    $fifth_question = $questions[4] //arrays start at position 0 so 4 would be the 5th position

また、各フォーム要素配列をループして、上記のように多次元配列を作成することもできます。それは次のようになります:

<?php
    $questions = $_POST[question'];
    $answers = $_POST['answer'];
    $date = $_POST['date'];
    $combined = array();

    for($i = 0; $i < count($questions); $i++_
    {
         $combined[] = array('question'=> $questions[$i], 
                             'answer'=>$answers[$i], 'date'=>$dates[$i]);
    }

これがお役に立てば幸いです。

于 2012-10-02T20:09:51.880 に答える