• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:同じname属性の結果を1行にまとめる方法)

同じname属性の結果を1行にまとめる方法

このQ&Aのポイント
  • フォームメールCGIで同じname属性の結果を1行にまとめる方法を教えてください。
  • 現在、name属性を@DATA_KSに、valueの値を@DATA_VSに代入していますが、name属性が同じ場合にはvalueの値をカンマで区切って1行にまとめたいです。
  • 例えば、好きな食べ物の項目でりんご、ハチミツ、カレーを選んだ場合、表示方法を「好きな食べ物 りんご,ハチミツ,カレー」としたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • taknak08
  • ベストアンサー率50% (8/16)
回答No.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エンコード処理などを省略していますので、適宜読み替えてください。 (というか、上記のコードは即興で書いたもので一度もテストしていませんので、バグどころか文法エラーがあるかもしれません・・・笑) それでは、ご検討ください。

kohkun2008
質問者

お礼

早速の返答ありがとうございます。 ハッシュにまとめる方法で書き直したところうまく表示出来ました! 本当にありがとうございました。

関連するQ&A