- ベストアンサー
データの種類を表示する方法とは?
- 現在ショッピングカートの中身を表示する部分を作成しています。
- 備考の欄には$option1、$option2、$option3の値が挿入される形となっております。
- トータルで何種類で内クール便が何種類かと情報を表示させたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
$option1には "宅急便区分" + ":" + "通常/クール" + "倉庫コード" のフォーマットで入っているとします。 foreachのループ内に ---------------------------------------- # $option1の文字列でハッシュを作成し、カウンタ代わりにする。 $option1_total{$option1}++; ---------------------------------------- を仕込みます。 ループ後に ---------------------------------------- # ハッシュのキー @option1_total_keys= keys(%$option1_total); # ハッシュのキーが何種類かを算出(配列をスカラーで解釈し要素数を得る。$#option1_total_keys+1でも同じ) $option1_total_count = @option1_total_keys; # 「クール」を含むキーを抜き出し配列に @option1_cool_keys = grep(/クール/,@option1_total_keys); # トータルと同じようにしてクール便の種類を得る $option1_cool_count = @option1_cool_keys; ---------------------------------------- を仕込みます。 $option1_cool_countにはクール便の種類が $option1_total_countには宅急便の種類が入ります。 ハッシュを使えばこのように重複する値をカウントしたりということも簡単にできますね。
その他の回答 (1)
- piyo2000
- ベストアンサー率49% (144/293)
#1です。 >早速同じ形でおこなってみましたが、 >$option1_total_count は常に0 であれば、 $option1_total{$option1}++; の部分を $option1_total{$option1}=1; と書き換えてみてください。 それでもダメなら、コーディングミスです。 >@option1_cool_keys = grep(/クール/,@option1_total_keys); >を付け加えるとインターナルサーバーエラーになってしまいます いきなりサーバで動作させるのは止めましょう(^^; 最悪、cgiがサーバリソースを食いつくすような無限ループに陥るような可能性があります。 プロバイダのcgiサーバだと、こう言う事を繰り返すと使用禁止になります。 (自分では実行を止められないため、サーバの管理者に頼む事になります) 最悪でも、Windows環境(ローカル)で動作するPerlで動作を確認してから実行すべきです。 ちなみに、紹介したコードは動作確認をしてません(^^; サーバにログインできる権限があれば、最低でもperl -c -wは実行しましょう。(構文チェック) それと、気になっていたのがコーディングミスです。 perlの特色として「変数は宣言しなくても使える」というものがあります。 これは即ち、変数名が少しでも違ってたら別の変数と解釈されるということでもあります。 一番コーディングミスの影響が大きいところです。 Perl5ならuse strictが使えるはずですので、事前にmyで宣言するようにして 変数のスコープを明示化しましょう。 >ハッシュ系はいまいち苦手 ハッシュ(配列)をうまく使いこなせてこそのPerlです。 Perlでハッシュ(配列)を使わないなんて、普通はありえません。(^^; この場合、%option1_totalというハッシュは $option1の値をキーとした配列を作成しているはずです。
お礼
PIYO2000さん ご丁寧にご回答いただきましてありがとうございます。 またなにかございましたら、宜しくお願い致します。
お礼
専門的な内容なのにもかかわらず 丁寧に解説していただきありがとうございます。 早速同じ形でおこなってみましたが、 $option1_total_count は常に0 @option1_cool_keys = grep(/クール/,@option1_total_keys); を付け加えるとインターナルサーバーエラーになってしまいます 何が問題なのでしょうか? ハッシュ系はいまいち苦手なのでお手数かと思いますが、 再度アドバイスをいただけたらと思います。 ちなみに$option1のデータ構成は以下の通りとなっております。 宅急便区分:通常02*+0 宅急便区分:クール01*+200 宅急便区分:通常01*+0