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

文字列が「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分でずらずら条件を記述し、連結することは可能ですが、何とかして(ループしてとか?)短いステップで実装したいと考えているのですが全く良い案が浮かびません。

何か私に良い方法をご教授していただけないでしょうか。
よろしくお願いいたします

A 回答 (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));
?>
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/03/04 12:39

#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]];
  }
}

暇があれば両方試してみてください。レコード数が
少ないとよく分からないかも知れませんが、多い
場合はハッキリ、前者が有利だと分かりますよ。
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/03/04 12:38

いまいち状況がわからないのですが


たとえば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側で処理してみては?
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/03/04 12:38

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