アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもお世話になっている者です。フォームメールCGIで行き詰っております。

push(@DATA_KS,$name);
push(@DATA_VS,$value);

としてHTML側のname属性を@DATA_KSに、valueの値を@DATA_VSに代入しています。

<table border=0 cellpadding=3 cellspacing=1 bgcolor="#ffffff">
<tr><td bgcolor="#ff8000"><b><font size=+1>項目</font></b></td><td bgcolor="#ff8000"><b><font size=+1>内容</font></b></td></tr>
EOF

$count = @DATA_KS;

foreach (0..$count-1) {

print "<input type=hidden name=\"$DATA_KS[($_)]\" value=\"$DATA_VS[($_)]\">\n";

if ($DATA_VS[($_)] eq '') {}
else { print "<td bgcolor=\"#009900\">$DATA_KS[($_)]</td>\n"; }

if ($DATA_VS[($_)] eq '') {}
else { print "<td bgcolor=\"#ffffff\">$DATA_VS[($_)]</td>\n"; }
print "</td></tr>\n";
}

これで 項目 内容 が1セットで横並びになり項目の数だけ下に続き、値の無い項目は表示されない。というところまでは出来たのですが
さらに「name属性が同じ場合はvalueの値をカンマで区切ってヨコに並べる」ということがしたいのですが方法が分かりません。何卒宜しくお願いします。
例: 
○(希望表示方法)
好きな食べ物  りんご,ハチミツ,カレー
×
好きな食べ物  りんご
好きな食べ物  ハチミツ
好きな食べ物  カレー

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

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

お礼日時:2009/01/17 12:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!