インプットボックスの中のスペース区切りを in (xxx,yyyy,ddd) に整形する方法 - PHPプロ!Q&A掲示板

2830

  • 0P

インプットボックスの中のスペース区切りを in (xxx,yyyy,ddd) に整形する方法

質問日時 / 2010年8月3日 00:16    回答数 / 3件

Questioner:  wahahaha  このエントリーをはてなブックマークに追加 

キーワード / キーワードが設定されていません

すみません。

まったくの初心者で申し訳ございませんが、


インプットボックスのなかに、

例えば
____________________________
|111 222 333 444 555|
____________________________
のような入力がはいっていた場合に、

select * from aaa where in (111,222,333,444,555)
のようなsqlを生成したいです。

こういった場合、どのようにやったらよいでしょうか。


ツリー一覧

┣A01pannnaデリミタがあるならばstr_replace関数で。デリミタが
┣A02shimix#pannnaさんの方法などはスマートですが、ちょっと無
┗A03yuu_a0>>CODE <?php $str = '111 222 333 444 555'; $arr

回答一覧

並び替え:

A01 参考になった
answererpannna [8月3日 03:00]

デリミタがあるならばstr_replace関数で。デリミタがない場合は正規表現で
preg_replace関数あたりでしょうか。

関数の説明はマニュアルを参照して下さい。

http://www.php.net/manual/ja/function.str-replace.php
http://www.php.net/manual/ja/function.preg-replace.php

この意見に回答する

ツリーへ TOPへ

A02 満足
answerershimix [8月3日 11:52] (最終編集:8月3日 11:56)

#pannnaさんの方法などはスマートですが、ちょっと無骨に・・

スペース区切りをカンマ区切りに変更するということで、区切り文字で区切られた文字列と配列の相互変換を扱うexplode/implodeを使うという手もあります。

  1. <?php
  2. $str = '123 456 78 90';
  3. $array = explode(' 'trim($str));
  4. $newstr = implode(','array_filter($array'notblank'));
  5. print $str . '--->' . $newstr;
  6.  
  7. function notblank($str) {
  8.     return trim($str)!='';
  9. }
  10. ?>

array_filterを通すのは、空白がひとつだけと限定できないので「空白のみ」が混じる可能性があるためですが、$arrayに格納したあとで「妥当な内容か」をチェックするでしょうから(input要素からPOSTされているのでしないとダメです)そのときに排除してもいいですね。

  1. <?php
  2. $str = '123 456 78 90';
  3. $newaray = array();
  4. $newstr = '';
  5. $array = explode(' 'trim($str));
  6. foreach ($array as $value) {
  7.     $value = trim($value);
  8.     if ($value == '') { continue}
  9.     // ここで$valueの妥当性チェックを行う
  10.     $newarray[] = $value;
  11. }
  12. if (count($newarray)) { $newstr = implode(','$newarray)}
  13. print $str . '--->' . $newstr;
  14. ?>

この意見に回答する

ツリーへ TOPへ

A03 満足
answereryuu_a0 [8月5日 08:37] (最終編集:8月5日 08:52)

  1. <?php
  2. $str = '111 222 333 444 555';
  3. $array = preg_split('/\s+/'$str, -1PREG_SPLIT_NO_EMPTY);
  4. $array = array_filter($array'is_numeric');
  5.  
  6. $array[0] or die;
  7.  
  8. // 必要に応じてエスケープ
  9. $table = '('.implode(','$array).')';

implodeexplodepreg_split などは全てシングルバイト関数なので気を付けてください。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
PHPのHTML埋め込み記述について
 このエントリーをはてなブックマークに追加 
A
$_POST["data"] == "男" ? $val = "checked" : $val = "" ; の意味は以下と同じです。 if($_POST["data"] == "男"){ $val = "checked; } e...

>>続きを読む

kende様のご指摘通り、三項演算子を使用する際には、コードの複雑度などを考慮する必要がありますね。書きやすさと共に可読性も追求したいところですね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)