LoginSignup
0

More than 3 years have passed since last update.

【PHP】strstr() と strtr() の合わせ技で、文字列内の複数文字を置換する

Last updated at Posted at 2020-10-12

こんな時に使えます

とあるDBのテーブル内で、複数の要素(例でいうと、職業とステータス)が、
ひとつの文字列に連結されてしまっている場合に、
・分離して
・区切りに使われている記号を取り除いて
・取得

ができる。

実例

$sample_text = "勇者[HP300]"

分離する


$sample_text_extract = strstr($sample_text, '[');  
// 変数の中身は、[HP300]という文字列

【解説】
strstr()
https://www.php.net/manual/ja/function.strstr.php

第一引数:対象の文字列
第二引数:検索したい文字
返り値: 検索したい文字を含んだ、文末までの文字列

区切りに使われている文字を取り除く

$replace = [
    '[' => '',
    ']' => ''
];

$sample_text_trimmed = strtr($sample_text_extract, $replace);
// 変数の中身は、HP300 という文字列


【解説】
strtr()
https://www.php.net/manual/ja/function.strtr.php

第一引数:対象の文字列
第二引数:置換before/after(※配列形式で複数指定可)

※公式ドキュメントでは、小文字を大文字に置換するやり方が紹介されています。
バイト数の大きいものが優先される等ルールがあるようです。

<?php
$trans = array("h" => "-", "hello" => "hi", "hi" => "hello");
echo strtr("hi all, I said hello", $trans);
?>

// 結果: hello all, I said hi

引数を二つだけ渡す場合は、二番目の引数を array('from' => 'to', ...) 形式の配列にしなければなりません。 返される値は文字列で、もとの文字列中にある配列のキーと同じ部分を対応する値で置換したものとなります。 一番長いキーから順に調べます。一度部分文字列の置換を行うと、 置換後の文字列がさらに置換の対象となることはありません。

筆者コメント

私は、例のように、
・文字列が記号で囲まれて
・かつ他の文字列と連結して、
・ひとつのカラムに保存されている
というデータを取り出す必要性があり、この合わせ技を使いました。
他にもいろんな使い方ができそうですので、何かのヒントになれば幸いです。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0