- ベストアンサー
同じname属性の結果を1行にまとめる方法
- フォームメールCGIで同じname属性の結果を1行にまとめる方法を教えてください。
- 現在、name属性を@DATA_KSに、valueの値を@DATA_VSに代入していますが、name属性が同じ場合にはvalueの値をカンマで区切って1行にまとめたいです。
- 例えば、好きな食べ物の項目でりんご、ハチミツ、カレーを選んだ場合、表示方法を「好きな食べ物 りんご,ハチミツ,カレー」としたいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
ご質問中のコードは抜粋されたもののようですので、的を射たお答えになっているか自身がないのですが、まず > push(@DATA_KS,$name); > push(@DATA_VS,$value); のように$nameと$valueを別管理するのではなく、$nameと$valueのハッシュにまとめてしまうことをおすすめします。 具体的には my %DATA_VS; while ($nameと$valueのループ?) { push @DATA_KS, $name; $DATA_VS{$name} = [] if not exists $DATA_VS{$name}; push @{$DATA_VS{$name}}, $value; } のように $DATA_VS{$name}=[値, 値, ...] とまとめたのち、 for my $name (@DATA_KS) { for my $value (@{$DATA_VS{$name}}) { print qq{<input type=hidden name="$name" value="$value" />\n}; } } や for my $name (@DATA_KS) { print qq{<tr>}, qq{<td bgcolor="#009900">$name</td>}, qq{<td bgcolor="#ffffff">}, join(',', @{$DATA_VS{$name}}), qq{</td>}, qq{</tr>\n}; } などのようにしてみてはいかがでしょう。 なお上記では、($DATA_VS[($_)] eq '') のような空文字チェックやHTMLエンコード処理などを省略していますので、適宜読み替えてください。 (というか、上記のコードは即興で書いたもので一度もテストしていませんので、バグどころか文法エラーがあるかもしれません・・・笑) それでは、ご検討ください。
お礼
早速の返答ありがとうございます。 ハッシュにまとめる方法で書き直したところうまく表示出来ました! 本当にありがとうございました。