データベース検索などを利用するときに、$_POSTや$_GETで受け取った文字列を配列に変換してデータベース関数に渡す処理をする場面はよくあります。
そんな処理を実行するには・・・
というメモ書きです。
implode、explodeで文字列⇔配列
implode()は配列の各要素を任意の文字列でつなげた文字列を生成する関数です。
implode ( string $glue , array $pieces )
$glueに接続する文字列を、$piecesに文字列を要素とする配列を指定すると、$piecesの各要素を$glueでつなぎあわせた文字列を返します。
$arr = array( 'てすと', 'テスト', 'test', 'TEST' ); $txt = implode('=', $arr); print_r($txt);
出力結果はこうなります。
てすと=テスト=test=TEST
explode()は任意のセパレータで文字列を分割し、分割した文字列を要素とする配列を生成します。
explode ( string $delimiter , string $string [, int $limit ] )
$delimiterにセパレータを、$stringに文字列を指定すると、$string中で$delimiterにマッチする部分で文字列を分割し、配列として返します。
$arr1 = explode('=', $txt); print_r($arr1);
出力結果はこうなります。
Array ( [0] => てすと [1] => テスト [2] => test [3] => TEST )
implode、explodeを使って
フォーム入力からデータベースを検索する
id | tag |
0001a | php 基本 配列 |
0002b | php 基本 文字列 |
0003c | JAVA 基本 配列 |
0004d | JAVA 応用 配列 |
0005e | PHP 基本 配列 |
上のようなテーブルのidカラムをフォーム入力された文字列から検索してみます。
テーブル名は data としておきます。
//フォームなどから取得した全角・半角混合のテキスト $string = 'PHP 基本 配列'; //全角スペースを半角スペースに変換 $str = mb_convert_kana($string, 's', 'UTF-8'); //半角スペースで文字列を分割 $strArr = explode(' ', $str); //空の配列を準備 $tmpArr = array(); //foreachで分割した要素ごとにSQL文をつくる foreach($strArr as $str){ $tmpArr[] = '"tag" LIKE "%'.$str.'%"'; } //AND条件の場合のWHERE句 OR条件ならANDをORに変える $terms = implode(' AND ', $tmpArr); //WHERE句を作る $where = 'WHERE '.$terms.';'; //テスト用SQLiteデータベースに接続 $db = new PDO('sqlite:./db/test.db'); //検索語句に該当するidを検索 $stm = 'SELECT "id" FROM "data" '; //上で作ったWHERE句をつなげる $stm .= $where; //SQLを実行 $res = $db->query($stm); $resArr = $res->fetchAll(); print_r($resArr);
最後にprint_r()で表示されるテキストは次のようなります。
Array ( [0] => Array ( [id] => 0001a [0] => 0001a ) [1] => Array ( [id] => 0005e [0] => 0005e ) )
今回はimplode()、explode()を使って文字列を操作して、データベース中の語句を検索しました。
文字列に対して定形の処理をする場合にはかなり有効な方法です。