下記の内容が含まれるフォームから送信されてくるデータを処理しようとしています。
これ以外にもたくさんのデータが送信されてきます。
html
1 <table> 2 <tr> 3 <td>カテゴリ</td><td>商品番号</td><td>商品名</td><td>表示順</td> 4 </tr> 5 <tr> 6 <td><input type="text" value="c1" name="c1"></td> 7 <td><input type="text" value="1001" name="id_c1_1001"></td> 8 <td><input type="text" value="AAA" name="name_c1_1001"></td> 9 <td><input type="text" value="1" name="order_c1_1001"></td> 10 </tr> 11 <tr> 12 <td></td> 13 <td><input type="text" value="1002" name="id_c1_1002"></td> 14 <td><input type="text" value="BBB" name="name_c1_1002"></td> 15 <td><input type="text" value="2" name="order_c1_1002"></td> 16 </tr> 17 <tr> 18 <td></td> 19 <td><input type="text" value="1003" name="id_c1_1003"></td> 20 <td><input type="text" value="CCC" name="name_c1_1003"></td> 21 <td><input type="text" value="4" name="order_c1_1003"></td> 22 </tr> 23 <tr> 24 <td><input type="text" value="c2" name="c2"></td> 25 <td><input type="text" value="2011" name="id_c2_2011"></td> 26 <td><input type="text" value="DDD" name="name_c2_2011"></td> 27 <td><input type="text" value="10" name="order_c2_2011"></td> 28 </tr> 29 <tr> 30 <td></td> 31 <td><input type="text" value="2005" name="id_c2_2005"></td> 32 <td><input type="text" value="EEE" name="name_c2_2005"></td> 33 <td><input type="text" value="9" name="order_c2_2005"></td> 34 </tr> 35 </table>
postされたデータから上記のデータを読むための配列データがあるので、この配列をループさせながらキーを作成してpostデータを読み取っています。
php
1//こういう配列があります 2$arr = array( 3 array( 4 'category_id' => 'c1', 5 'item_data' => array( 6 array('id' => '1001'), 7 array('id' => '1002'), 8 array('id' => '1003') 9 ) 10 ), 11 array( 12 'category_id' => 'c2', 13 'item_data' => array( 14 array('id' => '2011'), 15 array('id' => '2005') 16 ) 17 ) 18); 19 20//送信データは配列をループしてキーを作成して取得している 21foreach($arr as $val){ 22 $category_id = $val['category_id']; 23 foreach($val['item_data'] as $item){ 24 $id = $item['id']; 25 //postデータの取得(して何かしら処理します) 26 $_post['id_'.$category_id.'_'.$id]; 27 $_post['name_'.$category_id.'_'.$id]; 28 $_post['order_'.$category_id.'_'.$id]; 29 } 30}
このプログラムは自分で考えて作りました。
プログラムは期待通りに動いているので問題が発生している訳ではありませんが、もう少しスマートな書き方がないものかと思い質問させていただきました。
基本的にはフォームに表示されている入力項目はどれだけ数が多くなったとしてもプログラムで把握しているので受け取る側で送信されてくるであろう値を処理しています。
ただし、送信されるデータが可変になった場合にデータを送信された数だけ処理しようとすると今回の様な方法が成り立たず、postデータを全件取得しキーを解析するなどの手間がかかります。
HTMLフォームから送信するデータに意味を持たせてグループ化する方法なんてものはないでしょうか?
上記の例で<table>は1つのまとまりになり、カテゴリーでグループ化され、その中に商品データが複数入っています。
PHPのプログラムだとこういう構造がわかっていれば件数関係なくループをして全件取得できますが、私の知識ではフォームから送信されるデータにはキー名を付けて識別することしかできず、もっとスマートな方法があれば今後のプログラムに役立ていこうと思っています。
経験豊富なエンジニアの皆様、よろしくお願い致します。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/02 04:07