みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

いつもお世話になっている者です。フォームメール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の値をカンマで区切ってヨコに並べる」ということがしたいのですが方法が分かりません。何卒宜しくお願いします。
例: 
○(希望表示方法)
好きな食べ物  りんご,ハチミツ,カレー
×
好きな食べ物  りんご
好きな食べ物  ハチミツ
好きな食べ物  カレー

投稿日時 - 2009-01-15 12:38:01

QNo.4631917

すぐに回答ほしいです

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

ご質問中のコードは抜粋されたもののようですので、的を射たお答えになっているか自身がないのですが、まず
 > 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エンコード処理などを省略していますので、適宜読み替えてください。
(というか、上記のコードは即興で書いたもので一度もテストしていませんので、バグどころか文法エラーがあるかもしれません・・・笑)
それでは、ご検討ください。

投稿日時 - 2009-01-15 19:54:26

お礼

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

投稿日時 - 2009-01-17 12:37:03

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問