- ベストアンサー
implodeについて
初めまして。すみませんがいきなり質問させてください。 implode についてなんですが、 implode($a,",") とすると、カンマ区切り、たとえば配列されたものが (a,b,c) のようにでてきますよね? このときに ('a','b','c') というように、シングルコーテーションでくくって 出したいのですが、何か良い方法はありませんか? よろしくお願いします。 PHPは4.1でPostgreSQLを使用しております。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
おそらく $_POST["syouhin"] なんていう配列はない(選ばれていない)のに implode してるからエラーがでるのでしょう if( $_POST["syouhin"] ){ //配列があれば $in_syouhin=$_POST["syouhin"]; for($i=0;$in_syouhin[$i];$i++){ $in_syouhin2 = "'".$in_syouhin[$i]."'"; } $renketumoji=implode($in_syouhin2,","); } のようにして、配列があれば文字列を作成するようにするといいのではないでしょうか ただし配列として送る要素(value)に 0 がある場合 null とみなされてしまいimplodeでエラーがおきますので valueに0を使用しないか、0を文字列として扱ったほうがいいですね。これについてはエラー回避の良い方法があるかもしれませんが私にはわかりません。
その他の回答 (2)
- imasyu
- ベストアンサー率36% (19/52)
すいません違いました。 配列から参照して新しい配列を作る時にコケますね for($i=0;$arr[$i];$i++){ $arr2[] = "'".$arr[$i]."'"; //ここ変えました。 } $string = implode(",",$arr2); あと、 $in_syouhin[]=$_POST["syouhin"]; という行がありますが、これだと2次元配列になってしまうと思うのでこの行のみ $in_syouhin=$_POST["syouhin"]; に変えるか、全体を for($i=0;$_POST["syouhin"][$i];$i++){ $arr[] = "'".$_POST["syouhin"][$i]."'"; } $string = implode(",",$arr); のようにしてみて下さい。変数は増えるけど前者のほうがスッキリしてていいと思います。 PostgreSQLはよくわからないのですがこれで目的の動作はいけると思います、またもや試してないので動作しなかったら教えてください。
補足
imasyuさん、毎回ありがとうございます。 おかげさまで、配列の方はうまくできました。 しかし、検索画面のほかの条件(TEXTや、combo)と 組み合わせたときに、このリストボックスの条件を記入していないときにも、リストボックスの条件までがSQl文に反映されてしまい、 Bad arguments to implode() と出てしまいます。 このリストボックス条件を指定していないときは、空条件にするために、良い方法はありませんか? 他のTEXTや、comboは条件を指定しなければ反映されないのですが・・・ 質問がわかりづらくてすみません。。
- imasyu
- ベストアンサー率36% (19/52)
配列をimplodeして1つの文字列にする前に要素を取り出して両側に’をつけておけばいいのでは $arrを配列として for($i=0;$arr[$i];$i++){ $arr[] = "\'".$arr[$i]."\'"; } $string = implode(",",$arr); 試してないので全然違うかもしれませんが
補足
imasyuさん、ありがとうございます。 すみません、凄い初心者なので、おっしゃる通りにしてみましたが、うまくいきません・・・ 状況としましては、 まず検索フォームがありまして、そこでの配列を、検索結果画面に引き渡したいのです。 検索フォーム側: <SELECT NAME="syouhin[]"size=5 multiple> として、ここで選ばれた複数の選択を 検索結果画面 $in_syouhin[]=$_POST["syouhin"]; for($i=0;$in_syouhin[$i];$i++){ $in_syouhin []= "\'".$in_syouhin[$i]."\'"; } $renketumoji=implode($in_syouhin,","); として、 print $renketumoji; exit; で、確認してみると、 Warning: Bad arguments to implode() と、出てしまいます。 すみませんが、御教授の方、お願いします。
お礼
imasyuさん、ありがとうございました! 大変お世話になりました。 無事にできるようになりました。 本当にありがとうございます!