質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

2851閲覧

PHPでの二次元配列の作成

teruteru

総合スコア9

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

1グッド

0クリップ

投稿2015/05/18 15:20

HTMLのフォームから送られてきた回答を二次元配列にしたいです。

HTMLフォーム

lang

1<form action="get.php" "method="post""> 2<label for="a"><input type="radio" name="q1[]"class="btn">いぬ</label> 3<label for="b"><input type="radio" name="a1[]"class="btn">ねこ</label> 4<label for="c"><input type="radio" name="a1[]"class="btn">とり</label> 5<input type="submit" name="" class="btn"> 6</form>

上記の選択からひとつ選び、PHPファイルにPOSTで送る。

PHPファイル

lang

1$_POST; 2$json=json_encode($_POST); 3$jresult=file_put_contents('get.json',$json,FILE_APPEND);

POSTで受け取り、jsonデータに変換、別ファイルを作成しそこに書き込みしています。

jsonのデータ形式としては、以下のような二次元配列にしたいのですがやり方がわかりませんでした。
数字部分はフォームデータが送信されるたび増えるようにできたらいいなと思っています。

lang

1{"q1":[ 2{"inu":8}, 3{"neko":4}, 4{"tori":11}, 5]}

上記のような二次元配列にするには、PHP側ではどのような記述をすればいいのでしょうか?
わかりにくかったら申し訳ありません、ご教授お願いいたします。

Manabu_K👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

検証していないので動作保障は出来ませんが概ねこんな感じで。。適時var_dumpなどで内容確認して下さい。
jsonは、PHPから見て、./json/hoge.json、にあるものとします。

$json_name = './json/hoge.json'; $json = file_get_contents($json_name); $array = json_decode($json, true); // JSONを連想配列に $json_answers = $array['q1']; var_dump($json_answers); // 後で消して下さい // POSTされた値を取得 $req_ans = $_POST['answer']; // JSON内の連想配列要素に、POSTされた要素を合致させ、+1 $json_answers[$req_ans] = $json_answers[$req_ans] + 1; var_dump($json_answers); // +1されているのを確認。後で消して下さい。 // 新しい配列に、合算した配列を入れる $new_array = array(); $new_array['q1'] = $json_answers; // JSON化 $new_json=json_encode($new_array); // 書き出し $jresult=file_put_contents($json_name, $new_json, FILE_APPEND);

バグあったらごめんなさい。。

投稿2015/05/19 05:09

SaintKnowledge

総合スコア368

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teruteru

2015/05/19 10:53

お返事が遅れて申し訳ないです。 ご丁寧にありがとうございます!本当に助かりました!
guest

0

勘違いされているか、端折って書かれたか、定かではないですが、「数字部分はフォームデータが送信されるたび増えるようにできたらいいな」とは、PHPは送られてきたPOST値に対して、集計処理を実行して、結果としてJSONを書き出す、という処理が前提になると思います。

HTML

<form action="get.php" "method="post""> <label for="a"><input type="radio" name="answer" value="inu" class="btn">いぬ</label> <label for="b"><input type="radio" name="answer" value="neko" class="btn">ねこ</label> <label for="c"><input type="radio" name="answer" value="tori" class="btn">とり</label> <input type="submit" name="" class="btn"> </form>

PHPの処理

HTMLからPOSTされる ↓ 格納されているJSONファイルを読み出し。json_decodeでPHPで扱いやすくする。 inu,0 neko,0 ↓ POSTされたanswerのvalue値と一致する、格納しているファイルの項目の値を足し算(基本+1かと) inu,1 neko,0 ↓ $array['q1'] = decodeして足し算した配列; $json=json_encode($array) ↓ JSONファイル書き出し $jresult=file_put_contents('get.json',$json,FILE_APPEND);

投稿2015/05/18 16:00

SaintKnowledge

総合スコア368

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teruteru

2015/05/19 04:35

回答ありがとうございます! すみません、端折って書いてしまいました...数字~の部分は、PHPで処理するのはわかっていたのですがどういう流れになるのかはわからなかったので、為になりました。親切に書いて頂きありがとうございます。 もしよければ、PHPの「POSTされたanswerのvalue値と一致する、格納しているファイルの項目の値を足し算」という部分の詳細なコードを書いていただけないでしょうか...自分でも考えてみたのですが、うまく処理できませんでした。質問ばかり申し訳ありません、どうかよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問