• ベストアンサー

文字列連結パターンが多数ある場合

文字列が「A B C D E F」とあるとします。 これらはDB上で連結するかしないか(0しない1する)のフラグをそれぞれ持っています 例えば取得したふらぐがA(1)B(1)C(0)D(0)E(1)F(0)だったら 連結後の表記は「A、B、E」となります。 if分でずらずら条件を記述し、連結することは可能ですが、何とかして(ループしてとか?)短いステップで実装したいと考えているのですが全く良い案が浮かびません。 何か私に良い方法をご教授していただけないでしょうか。 よろしくお願いいたします

  • PHP
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • mpx
  • ベストアンサー率71% (149/209)
回答No.3

DBから読み込み後の処理でも良いのなら 以下でも出来そうです。 <?php // DBからの読み込み結果が下記のように$resultに格納されているとします $result = array("A"=>1, "B"=>1, "C"=>0, "D"=>0, "E"=>1, "F"=>0); // 下記の1行で! print implode(", ", array_keys($result,1)); ?>

yyckeien
質問者

お礼

ありがとうございました この処理を使わせていただきます

その他の回答 (2)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

#1さんの回答のようにSQLでやる方が 速いと思いますよ。 仮にフィールド名がA,A_F,B,B_Fのように なっていると仮定すると、次のようにしては 如何でしょう。 【MySQL】 select concat (case when A_F=1 then A else '' end ,case when B_F=1 then B else '' end ,case when C_F=1 then C else '' end 以下略 ) from ・・・ 【Oracle】 select case when A_F=1 then A else '' end || case when B_F=1 then B else '' end || case when C_F=1 then C else '' end || 以下略 from ・・・ 文字列の連結はDB毎に違いますし、条件に よる選択文も異なることがあるので、上記 以外のDBの場合は別途、考える必要が あります。 どうしてもPHPでやりたいなら、フィールド名を 工夫して、数値化するとか、配列に仕込んで インデックスで回す方法があります。 $結果セット ← クエリを実行して得たもの $名前配列 = array("A","B","C",・・・); $フラグ配列 = array("A_F","B_F",・・・); $結合結果 = ""; for ( $i = 0 ; $i < 6 ; $i++ ) {   if ( $結果セット[$フラグ配列[$i]] == 1 ) {     $結合結果 = $結合結果 . $結果セット[$名前配列[$i]];   } } 暇があれば両方試してみてください。レコード数が 少ないとよく分からないかも知れませんが、多い 場合はハッキリ、前者が有利だと分かりますよ。

yyckeien
質問者

お礼

ありがとうございました 参考にさせていただきます

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

いまいち状況がわからないのですが たとえばDBで管理しているのがMySQLだとしたら create table tbl(data varchar(10),flg tinyint); insert into tbl values('A',1),('B',1),('C',0),('D',0),('E',1),('F',0); select group_concat(data separator '、') as kekka from tbl where flg=1; みたいな感じでSQL側で処理してみては?

yyckeien
質問者

お礼

ありがとうございます 参考にさせていただきます

関連するQ&A

  • エクセル 文字列連結演算子で文字列を結合

    文字列連結演算子の「&」 を使って文字列を結合し、その間に()を投入したいです。 A列   B列  C列        D列 高橋太郎 東京  文字連結演算子  高橋太郎(東京) C列 =A1&(B1) ではエラーがでます。正しい書式を教えてください。 A列    B列  C列   D列  E列        F列 高橋太郎 (    東京   )  文字連結演算子   高橋太郎(東京) E列 =A1&B1&C1&D1 ってのは分かるのですが、もっとスッキリするものはないでしょうか? 宜しくお願いします。

  • 3つの表を1つに縦に連結する

    3つの表W、X、Yがあって、 これらの列を縦に連結して表Zに するにはどのようにすれば良いでしょうか? ちなみにDBはAccess2000です。 宜しくお願いします。 表W F1|F2 ----- A |B A |B 表X F1|F2 ----- C |D C |D 表Y F1|F2 ----- E |F E |F 表Z F1|F2 ----- A |B A |B C |D C |D E |F E |F

  • C#で16進バイナリ文字列連結

    C#で16進バイナリ文字列連結 C#にてシリアル通信の勉強を始めたばかりなのですが 早速初っ端の基礎から解らず立ち往生しています。 ushort a=0x0050; byte b = 0x00; byte c = 0xff; ushort d = 0x03ff; byte e = 0x00; ushort f = 0x000c; と16進数値が居ます。 これを、リトルインディアン形式で連結させて 50 00 00 ff ff 03 00 0c 00 という電文にしたいのですが、どうやって繋げたらいいのでしょうか? 今まで"アスキー文字列"を単に繋げて送出したことしかなくて、いざバイナリ形式でやってみようとして うろたえてます。

  • エクセルで、空白のセルを無視して連結する方法を教えてください!

    エクセル2002を使っております。   A B C D         1 あ い う え     2   お   か    3 か   き く     と文字が入ったセルがあるときに   A B C D       E  1 あ い う え      あいうえ  2   お   か      おか 3 か   き く      かきく このようにE列のセルに空白を入れずに連結したいのです。 E2で、=A2&B2&C2&D2 といれて連結させると、   A B C D       E  1 あ い う え      あいうえ  2   お   か       お か 3 か   き く      か きく となってしまい困っています。どなたかよい方法をご存知でしたら教えてください。よろしくお願いいたします。

  • 【word2010】 文字列連結演算子?について

    WORD2010で差込印刷をしています。 データ元で、項目A(文字列)ブランクの場合ブランク、項目Aがブランクでなければ項目B(文字列)と項目C(文字列)を表示させたいのですが、偽の戻り値の表記のしかたが分かりません。下記のように書くと項目B(文字列)しか戻ってきません。項目C(文字列)はどのように連結すればいいのでしょうか。演算子、「&」や「+」で連結すればいいのでしょうか? {if {MERGEFIELD 項目A} = """" {MERGEFIELD 項目B}{MERGEFIELD 項目C} } ご教授のほどよろしくお願いいたします。

  • Excelでの文字列編集について

    Excel2003での質問です。 今、A列~E列に以下の文字が入っています。 A  B  C  D  E 1あ い う え お  2あ   う 上記の内容を「・」で区切りを入れて、F列に結合させたいのですが  F 1あ・い・う・え・お 2あ・う どのようにすればよろしいでしょうか? よろしくお願いします。 尚、現時点で、F1に=CONCATENATE(A1,B1,C1,D1,E1)を設定し、  F 1あいうえお となっています。

  • Excelでの文字列編集(再質問です)

    Excel2003での再質問です。 今、A列~E列に以下の文字が入っています。 A  B  C  D  E 1あ い う え お  2あ   う 上記の内容を「・」で区切りを入れて、F列に結合させたいのですが  F 1あ・い・う・え・お 2あ・う この質問に対しては、以下のご回答をいただき、解決することが出来ました。 =SUBSTITUTE(TRIM(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1&B1&C1&D1&E1,A1,A1&" "),B1,B1&" "),C1,C1&" "),D1,D1&" "))," ","・") このたび、3列増やし、A~Hまでの計算式を以下で行ったところ、 =SUBSTITUTE(TRIM(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1&B1&C1&D1&E1&F1&G1&H1,A1,A1&" "),B1,B1&" "),C1,C1&" "),D1,D1&" "),E1,E1&" "),F1,F1&" "),G1,G1&" "))," ","・") 計算式がエラーとなります。ご教示いただけますでしょうか? よろしくお願いします。

  • エクセルでリストを使って特定の文字列を数える

    エクセル2003を使っています。 シート3に A B C というリストAと D E F というリストB そして A B C D E F と一緒になっているリストCを作りました。 そしてシート1にリストCを使ってこのような表を作りました。 A D A C B D F E C B A B と選択したとします。 そのとき、左側にリストAの中に含まれている文字列を数える方法はないでしょうか。 使っているのは、 Windows XP Professional SP2 Microsoft Office Excel 2003 SP3 です。

  • 英文字を含む文字列のURIエンコードについて

    宜しくお願いいたします。 以下のサイトでHTMLソースの一部をURIエンコードして、javascriptでデコード・書き戻して利用する方法についての記述を見つけました。 http://ameblo.jp/azuki-milk-lush/entry-10559249105.html このページには、以下のようにエンコードされている事例が掲載されています。 document.write('<a href="mailto:メールアドレス">お問い合わせ</a>'); ↓ %64%6F%63%75%6D%65%6E%74%2E%77%72%69%74%65%28%27%3C%61%20%68%72%65%66%3D%22%6D%61%69%6C%74%6F%3A%73%75%70%70%6F%72%74%40%73%74%61%2D%6C%6F%67%2E%63%6F%6D%22%3E%E3%81%8A%E5%95%8F%E3%81%84%E5%90%88%E3%82%8F%E3%81%9B%3C%2F%61%3E%27%29%3B 上記では一見アルファベットも識別できないような形でエンコードされています。 早速このページで紹介されている変換サービスサイトで、実験をしてみたのですが、同じような結果にはなりません。 http://itsd210.s24.xrea.com/ja/urlencode/ 【▼こうなってしまう▼】 document.write('<a href="mailto:メールアドレス">お問い合わせ</a>'); ↓ document.write('%3Ca%20href%3D%22mailto%3A%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%22%3E%E3%81%8A%E5%95%8F%E3%81%84%E5%90%88%E3%82%8F%E3%81%9B%3C%2Fa%3E')%3B 一見してアルファベットも識別できないような変換はどのようにすれば行えるのでしょうか? 詳しい方がいらっしゃいましたら、ご教示願います。 何卒、宜しくお願い申し上げます。

    • ベストアンサー
    • HTML
  • 文字列の足し算

    お世話になっております。 例えば変数で a = 10 b = "10" c = 20 d = "20" とあったとします。 そこで、 a + b = 20 a + c = 30 b + d = 1020 文字列同士を足すと文字を連結させてしまいます。 当たり前ですが・・・・ そこで、この文字列(b + d)の結果を30に出来ないでしょうか? よろしくお願い致します

専門家に質問してみよう