Inkscapeのマニュアル本、各種サイトで好評発売中! ▶公式サイトはこちらから

PHPで配列と文字列の変換をデータベースに応用する方法

データベース検索などを利用するときに、$_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()を使って文字列を操作して、データベース中の語句を検索しました。

文字列に対して定形の処理をする場合にはかなり有効な方法です。

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA